ローカルで実行するかなり単純なC#WebAPI2プロジェクトがありますが、リモートマシン(Windows Server 2012 R2 Standard)でIIS)に発行した後、customErrorsを「Off」に設定した後、Webページに以下が表示されます):
「/」アプリケーションのサーバーエラー。コンパイルエラーの説明:この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソースコードを適切に変更してください。コンパイラエラーメッセージ:コンパイラはエラーコード-2146232576で失敗しました。
コンパイラの詳細な出力 を取得してIISサーバーで実行すると、 スマートスクリーンエラーメッセージ と表示されます:
このアプリはPCでは実行できません。 PCのバージョンを見つけるには、ソフトウェアの発行元に確認してください。
コンパイラーのバージョンと関係があると思いますが、最後に公開されてから何も変わっていません。
何か案は?
コンパイルエラー
説明:この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソースコードを適切に変更してください。
コンパイラエラーメッセージ:コンパイラはエラーコード-2146232576で失敗しました。
NuGetをアップグレードした後にこの問題に直面し、以下の手順で解決しました。
ステップ1:NuGet Package Console
からこれらのNuGetパッケージを削除します
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
ステップ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=\"Web\" /optionInfer+"></compiler>
</compilers>
</system.codedom>
PS:しばらくして、他のエラーを修正するために、<system.codedom>
を完全に削除しました。
犯人はMicrosoft.Net.Compilers
パッケージ。プロジェクト、特にRazorビューで最新のC#構文/機能(バージョン6.0、7.0)をサポートするために使用されます。パッケージは、バージョンに応じて、問題のマシンにinstalledである完全な.NETフレームワークの特定の最小バージョンを必要とします。
たとえば、2.2.0パッケージには.NET 4.6+が必要です。たとえば、プロジェクトが.NET 4.5.2をターゲットにしている場合でも、開発マシンに最新の.NETがインストールされている可能性があり、すべてがうまくいきます。リモート展開マシンには.NET 4.5.2のみがインストールされており、ASP.NETアプリケーションが実行時にリソース(ビューなど)をコンパイルしようとすると、エラー-2146232576
。
あなたのオプション:
プロジェクトで新しいC#機能を使用する必要がある場合は、最新の.NETフレームワークをリモートマシンにインストールします。
使用できるC#の機能が多かれ少なかれ満足している場合は、Microsoft.Net.Compilersパッケージを、リモートマシンにあるフレームワークのみを必要とするバージョンにダウングレードします。たとえば、バージョン1.3.2には.NET 4.5のみが必要です。
上記の機能がまったく必要ない場合は、単にMicrosoft.Net.Compilers
およびMicrosoft.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)]
異なる文字列を作成し、ロールに1つの定数を設定する必要がありました。
[Authorize(Roles = IdentityRoles.AutorizationStrings.AdminBaseData)]
どこ
IdentityRoles.AutorizationStrings.AdminBaseData = "Administrator,Base data";
これが、この穴を自分でだます人を助けることを願っています。
.NETフレームワークをバージョン4.6にアップグレードし、機能しました。 Roslynパッケージはバージョン4.5以降に依存していますが、動作しませんでした。そのため、アップグレードにより機能しました。
NuGetパッケージ「Microsoft.CodeDom.Providers.DotNetCompilerPlatform」を2.0.0から2.0.1にアップグレードし、この問題を解決しました