web-dev-qa-db-ja.com

IIS Compilation Error -2146232576 AspNetInitializationExceptionModule

ローカルで実行するかなり単純なC#WebAPI2プロジェクトがありますが、リモートマシン(Windows Server 2012 R2 Standard)でIIS)に発行した後、customErrorsを「Off」に設定した後、Webページに以下が表示されます):

「/」アプリケーションのサーバーエラー。コンパイルエラーの説明:この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソースコードを適切に変更してください。コンパイラエラーメッセージ:コンパイラはエラーコード-2146232576で失敗しました。

コンパイラの詳細な出力 を取得してIISサーバーで実行すると、 スマートスクリーンエラーメッセージ と表示されます:

このアプリはPCでは実行できません。 PCのバージョンを見つけるには、ソフトウェアの発行元に確認してください。

コンパイラーのバージョンと関係があると思いますが、最後に公開されてから何も変わっていません。

何か案は?

24
feganmeister

エラー:

コンパイルエラー

説明:この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソースコードを適切に変更してください。

コンパイラエラーメッセージ:コンパイラはエラーコード-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=\&quot;Web\&quot; /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

あなたのオプション:

  1. プロジェクトで新しいC#機能を使用する必要がある場合は、最新の.NETフレームワークをリモートマシンにインストールします。

  2. 使用できるC#の機能が多かれ少なかれ満足している場合は、Microsoft.Net.Compilersパッケージを、リモートマシンにあるフレームワークのみを必要とするバージョンにダウングレードします。たとえば、バージョン1.3.2には.NET 4.5のみが必要です。

  3. 上記の機能がまったく必要ない場合は、単にMicrosoft.Net.CompilersおよびMicrosoft.CodeDom.Providers.DotNetCompilerPlatform(Roslyn CodeDomプロバイダー)プロジェクトのパッケージ。

24
Roman Pletnev

ターゲットフレームワークが変更され、Windows Serverに.NET 4.6をインストールする必要がありました。

9
feganmeister

上記のNuGetパッケージを削除するのに役立ちました。

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Microsoft.Net.Compilers

再コンパイルしてから追加し直します。

2
Bladeus

私にとっては、クラスのAuthorize属性のRolesプロパティの文字列を作成しようとしたためです。

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

異なる文字列を作成し、ロールに1つの定数を設定する必要がありました。

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

どこ

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

これが、この穴を自分でだます人を助けることを願っています。

0
ekblom

.NETフレームワークをバージョン4.6にアップグレードし、機能しました。 Roslynパッケージはバージョン4.5以降に依存していますが、動作しませんでした。そのため、アップグレードにより機能しました。

0
LeleGaurav

NuGetパッケージ「Microsoft.CodeDom.Providers.DotNetCompilerPlatform」を2.0.0から2.0.1にアップグレードし、この問題を解決しました

0
HumbleDev