看到大家都尝试Jexus以及dotnetcore,再加上新租了腾讯云的centos linux云服务器,决定要把公司比较简单的提供升级下载的网站部署到linux下试一下。
按照ASP.NET跨平台实践:无需安装Mono的Jexus“独立版” 的方法安装好Jexus 。
部署网站,访问网站时下出现错误
System.MissingMethodException: Method 'System.Web.Hosting.HostingEnvironment.set_IsHosted' not found.
按照“宇内流云”说的“windows dll最少化”原则精简dll。
[quote]
找不到 “set_IsHosted”,是因为你网站bin文件夹中有Windows上的System.Web.dll造成的。
将VS生成的web应用程序放到Linux上运行,要特别小心的就是bin文件夹中的dll。因为,VS是针对windows的,它不会考虑你是否在Linux上运行,所以,它带的dll,常有不兼容情况发生,这就是大家最容易遇上的不是坑的坑。
处理办法是:bin文件夹中的“windows dll最少化”!
意思就是,mono已经自带了的dll(见/usr/lib/moo/gac或jexus的runtime/lib/mono/gac),那就一定不要用win上带...[/quote]
精简后访问网站时报错:
The view must derive from WebViewPage, or WebViewPage<TModel>. (The view at ‘~/Views/home/index.cshtml’ must derive from WebViewPage, or WebViewPage<TModel>
经过各种增减引用dll及上网查找原因,最终发现是Web.config引用dll的问题(包括网站根目录下的Web.config以及Views目录下的Web.config)
经过精简后的网站根目录Web.config内容如下:
<?xml version="1.0"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
<!--
有关 web.config 更改的说明,请参见 http://go.microsoft.com/fwlink/?LinkId=235367。
可在 <httpRuntime> 标记上设置以下特性。
<system.Web>
<httpRuntime targetFramework="4.5" />
</system.Web>
-->
<system.web>
<compilation targetFramework="4.5.1"/>
<httpRuntime targetFramework="4.5.1"/>
</system.web>
<system.web>
<customErrors mode="on"/>
</system.web>
</configuration>
经过精简后的Views目录下的Web.config内容如下:
<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> </configSections> <system.web.webPages.razor> <pages pageBaseType="System.Web.Mvc.WebViewPage" ></pages> </system.web.webPages.razor> </configuration>
经过精简后Bin目录下的dll如下:(NPOI、ICSharpCode、itextsharp、log4net、Newtonsoft.Json是因为这个项目需要才引用的dll,如果是空白项目这几个dll也不需要)
重启jexus后,终于看到网站访问正常的界面了!