IIS编译错误-2146232576 AspNetInitializationExceptionModule

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

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

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

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

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

有任何想法吗?

错误:

编译错误

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

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

解:

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

步骤1:NuGet Package Console删除这些NuGet包

 PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform PM> Uninstall-package Microsoft.Net.Compilers 

步骤2:在关闭Web.config 标记之前添加这些system.codedom

        

PS:过了一会儿,我们完全删除了 ,修复了其他错误。

罪魁祸首是Microsoft.Net.Compilers包,用于支持项目中的现代C#语法/function(版本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#function – 将最新的.NET框架安装到远程计算机上。

  2. 如果您对仅提供或多或少现代C#function感到满意 – 将Microsoft.Net.Compilers包降级到只需要远程计算机上的框架的版本。 例如,版本1.3.2只需要.NET 4.5。

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

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

对我来说,只需删除上面的NuGet包:

 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

Microsoft.Net.Compilers

重新编译然后再添加它们。

对我来说,这是因为我试图为我的类上的属性Authorize的Roles属性构建一个字符串。

 [Authorize(Roles = IdentityRoles.Administrator + "," + IdentityRoles.BaseData)] 

我必须构建不同的字符串,并为Roles设置一个常量:

 [Authorize(Roles = IdentityRoles.AutorizationStrings.AdminBaseData)] 

哪里

 IdentityRoles.AutorizationStrings.AdminBaseData = "Administrator,Base data"; 

希望这有助于任何人在这个洞中耍花招。

我将.NET框架升级到4.6版本并且工作正常。 Roslyn软件包依赖于版本4.5+,但它不起作用。 所以升级使它工作。