Jexus System.MissingMethodException: Method 'System.Web.Hosting.HostingEnvironment.set_IsHosted&

Posted 从心出发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jexus System.MissingMethodException: Method 'System.Web.Hosting.HostingEnvironment.set_IsHosted&相关的知识,希望对你有一定的参考价值。

看到大家都尝试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后,终于看到网站访问正常的界面了!

 

以上是关于Jexus System.MissingMethodException: Method 'System.Web.Hosting.HostingEnvironment.set_IsHosted&的主要内容,如果未能解决你的问题,请参考以下文章

基于centos+jexus配置https(阿里云服务器最全配置jexus https教程)

3安装jexus

Mono+CentOS+Jexus

通过Jexus 部署 dotnetcore

Cactus在jexus上安装

Jexus~webApi程序的部署几个小坑