2017-05-10 992 views
21

我有一個相當簡單的C#WebAPI2項目,本地運行但在遠程計算機(Windows Server 2012 R2 Standard)上發佈到IIS後,網頁顯示以下內容(將customErrors設置爲「Off」 ):IIS編譯錯誤-2146232576 AspNetInitializationExceptionModule

Server Error in '/' Application. Compilation Error Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. Compiler Error Message: The compiler failed with error code -2146232576.

如果我搶了detailed compiler output和IIS服務器上運行它,我得到一個smartscreen error message說:

This app can't run on your PC. To find a version for your PC, check with the software publisher.

我猜這是什麼做的編譯器版本,但什麼事都沒有自從它改變了上次發佈。

任何想法?

+0

好的,所以事情變成了**。 Newtonsoft.Json軟件包在我沒有意識到的情況下進行了更新和簽入,似乎將項目的目標框架從4. – feganmeister

+1

提升到了.NET 4.5.2,這也可能是由Microsoft.CodeDom.Providers.DotNetCompilerPlatform引起的。 'Microsoft.Net.Compilers包'刪除它們,然後重新部署並觀察您的問題消失:P –

回答

7

目標框架已更改,必須在Windows Server上安裝.NET 4.6。

17

錯誤:

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: The compiler failed with error code -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> 
     <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> 

PS閉</system.data>標記之前添加這些system.codedom線同時,我們刪除了<system.codedom> comp letely,爲固定的其他錯誤。

+3

刪除Codedome也爲我做了這個訣竅。我的項目是4.5.2,但試圖使用它。我不會編譯任何編碼,因此可以刪除 – Juan

+1

刪除Nugets和web.config行解決了Azure經典雲服務中的相同問題 – cdiazal

+0

什麼是您的Roslyn編譯器版本?如果您使用的是Roslyn編譯器2.0+,則需要在服務器上安裝.net framework 4.6+。 – mattfei

10

罪魁禍首是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 Framework到遠程計算機。

  2. 如果您對僅提供更多或更少的現代C#功能感到滿意 - 將Microsoft.Net.Compilers軟件包降級爲僅需要您的遠程機器上的框架的版本。例如,版本1.3.2只需要.NET 4.5。

  3. 如果你並不需要在所有上述功能,只需從你的項目中刪除Microsoft.Net.CompilersMicrosoft.CodeDom.Providers.DotNetCompilerPlatform(羅斯林CodeDom中提供)封裝。

0

對我來說,這是因爲我試圖爲我的類的屬性Authorize的Roles屬性創建一個字符串。

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

我必須建立不同的字符串,只是設置一個常數角色:

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

其中

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

希望這有助於任何人說的技巧自理下來這個洞。

0

我幫只是刪除的NuGet包以上:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform 

Microsoft.Net.Compilers

重新編譯,然後將它們重新添加。