IIS编译错误-2146232576 AspNetInitializationExceptionModule

feg*_*ter 24 c# iis-8 asp.net-web-api2

我有一个相当简单的C#WebAPI2项目,它在本地运行,但在远程机器(Windows Server 2012 R2 Standard)上发布到IIS后,网页显示以下内容(将customErrors设置为"Off"后):

'/'应用程序中的服务器错误.编译错误说明:在编译服务此请求所需的资源期间发生错误.请查看以下特定错误详细信息并相应地修改源代码.编译器错误消息:编译器失败,错误代码为-2146232576.

如果我抓取详细的编译器输出并在IIS服务器上运行它,我会收到一条智能屏幕错误消息:

此应用无法在您的PC上运行.要查找适用于您的PC的版本,请咨询软件发行商.

我猜它与编译器版本有关,但自上次发布以来没有任何变化.

有任何想法吗?

Ami*_*neh 28

错误:

编译错误

描述:编译服务此请求所需的资源时发生错误.请查看以下特定错误详细信息并相应地修改源代码.

编译器错误消息:编译器失败,错误代码为-2146232576.

解:

升级一些NuGets后我遇到了这个问题,并通过以下步骤解决了.

第1步:从中删除这些NuGet包NuGet Package Console

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
Run Code Online (Sandbox Code Playgroud)

第2步:system.codedom在关闭</system.data>标记之前添加这些行Web.config

    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"></compiler>
            <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"></compiler>
        </compilers>
    </system.codedom>
Run Code Online (Sandbox Code Playgroud)

PS:过了一会儿,我们<system.codedom>完全删除了,修复了其他错误.

  • 删除Codedome也是我的伎俩.我的项目是4.5.2,但试图使用它.我没有任何代码dom编译所以可以删除 (3认同)

Rom*_*nev 25

罪魁祸首是Microsoft.Net.Compilers包,用于支持项目中的现代C#语法/功能(版本6.0,7.0),特别是Razor视图.根据其版本,该程序包要求在相关计算机上安装完整.NET框架的特定最低版本.

例如,2.2.0包需要.NET 4.6+.即使您的项目针对的是.NET 4.5.2,您可能在开发计算机上安装了最新的.NET,一切都很顺利.远程部署机器只安装了.NET 4.5.2,当您的ASP.NET应用程序尝试在运行时编译资源(例如视图)时,您会收到错误-2146232576.

你的选择:

  1. 如果您绝对需要在项目中使用新的C#功能 - 将最新的.NET框架安装到远程计算机上.

  2. 如果您对可用的现代C#功能感到满意 - 将Microsoft.Net.Compilers包降级到只需要远程计算机上的框架的版本.例如,版本1.3.2只需要.NET 4.5.

  3. 如果您根本不需要上述功能,只需从项目中删除Microsoft.Net.CompilersMicrosoft.CodeDom.Providers.DotNetCompilerPlatform(Roslyn CodeDom提供程序)包.


feg*_*ter 9

目标框架已更改,必须在Windows Server上安装.NET 4.6.