CodeDomプロバイダータイプ“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider”が見つかりませんでした


159

これはVS2015を使用したWebApiプロジェクトです。

再現手順:

  1. 空のWebApiプロジェクトを作成する
  2. ビルド出力パスを「bin \」から「bin \ Debug \」に変更します
  3. 走る

ここに画像の説明を入力してください

ビルド出力パスを「bin \」から「bin \ Debug \」に変更するまで、すべてが完全に機能しています。実際、「bin \」以外の出力パスは機能しません。

もう1つ追加すべきことは、ビルドを「bin \」に残しておけば、どこにでも別の出力パスを設定できることです。

これを解決するためのソリューションの提供を手伝ってください。実際の展開では問題が発生すると思います。


Webアプリケーションの出力パスを変更した理由を教えてください。ありがとうございました。
X-Mao

この例外は、msbuildコンパイル中に以前に実行したASP.NET MVC アプリケーションを更新するたびに発生します。
Nikolay Kostov

同じことが私にも起こりました。いくつかの.dllライブラリへの参照を追加した後に始まりました。ライブラリをアンインストールしてから再インストールして修正しました。そして...これは何が起こった理由の分からない
Letie Techera

回答:


127

プロジェクトにRoslyn参照があり、IISサーバーにデプロイしている場合、多くのホスティングプロバイダーがまだサーバーをアップグレードしていないため、Roslynをサポートしていないため、Webサイトで不要なエラーが発生する可能性があります。

この問題を解決するには、プロジェクトテンプレートからRoslynコンパイラを削除する必要があります。Roslynを削除しても、コードの機能に影響はありません。私や他のいくつかのプロジェクト(C#4.5.2)で問題なく動作しました。

次の手順を実行します。

  1. 以下に示すコマンドラインを使用して、以下のNugetパッケージから削除します(または、ルートプロジェクトソリューションを右クリックして削除することにより、NugetパッケージマネージャーのGUIを使用できます)。

    PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
    PM> Uninstall-package Microsoft.Net.Compilers
  2. Web.Configファイルから次のコードを削除し、IIS再起動します。(この方法は、ステップ1で問題が解決しない場合にのみ使用してください。

    <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 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+" />
    </compilers>


4
「 '/'アプリケーションでのサーバーエラー」が発生してから約1日になります。Visual Studio 2015で単純なHello Worldアプリケーションをコンパイルし、それをWebサーバーにデプロイすると、このエラーが発生します。上記の<compiler>行を削除すると、この問題もなくなりました。これが地球上でどのように起こり、より良い解決策があるかどうか知りたいのですが。私がhello worldアプリをこの方法で問題にぶつかることなくデプロイできないのは信じられないことです。MSはテストを行わないようです:-)
user2728841

4
Roslynを有効にするには、次の記事を参照してください 。ASP.NETアプリケーションでの.NETコンパイラプラットフォーム(「Roslyn」)の有効化ASP.NETで Roslynをコンパイルする理由 ASP.NETアプリケーションで新しいRoslynコンパイラーを有効にすると、主に次の2つの利点が得られます。*新しい言語機能のサポート*潜在的に改善されたアプリケーションの起動/プリコンパイル時間
vibs2006

1
新しいWebプロジェクトを作成したとき、それらの参照はすでに用意されていました。デフォルトでインストールされるのはなぜですか、その目的は何ですか?また、Roslynは新しいC#コンパイラです。それを削除してもVisual Studioが壊れないのはなぜですか?
Jens Mander

@JensManderはどちらもコンパイルランタイムです。IISでは、Roslynコンパイラを手動で有効にする必要があります。この記事に関する以前のコメントのリンクを参照してください'Enabling the .NET Compiler Platform.
vibs2006

同じエラーが発生し、Microsoft.CodeDom.Providers.DotNetCompilerPlatformの最新パッケージが最終的に更新されて解決しました。
赤:

48

この回答のアドバイスに従うように注意してください。手元の問題は解決しますが、後日別の問題が発生する可能性があります。

同じ問題が発生しました。どうやら.NETコンパイラがに読み込まれていなかったようGACです。それを解決するために私がしたことは:

まず、パッケージマネージャーコンソールで次のように入力します。

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

さて、何らかの理由で、マイクロソフトの優秀な紳士たちは、それをGACにインストールしないことにしました。開発者コマンドプロンプトを開いて次のように入力することにより、手動で実行できます。

gacutil -i "C:\*PATH TO YOUR APP CODE*\bin\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll"

結論

マイクロソフトは、すべてのユーザーにnugetsを使用して、nugetシステムで偶発的に発生するバグがなくても問題ないようにすることを奨励しています。異なるソリューションで同じプロジェクトを使用してみてください。それらの1つで使用している多数のNugetの1つを誤って(または更新せずに)更新してください。運が悪い場合は、他のソリューションを構築しようとしたときに私が何を意味するかがわかります。一方、GACにファイルを置くと、そこに置いたものを忘れがちで、新しい環境をセットアップするときに、これらのファイルを含めるのを忘れるので、将来の問題を引き起こす可能性があります。別の可能な解決策は、ファイルをサードパーティdllの中央フォルダーに配置することです(コンパイラーをサードパーティと呼ぶのは奇妙ですが)。これにより、新しい環境をセットアップするときに参照が壊れるという問題が発生します。DLLをGACにインストールする場合は、注意して、そうしたことを覚えておいてください。そうでない場合は、各プロジェクトのnugetを再度ダウンロードし、それによって引き起こされるすべての迷惑なバグに耐えてください(少なくとも、私がついにうんざりして、ファイルをGACに配置したときに発生していました)。どちらのアプローチも頭痛を与え、問題を引き起こす可能性があります。これは、どの問題を処理したいかという問題にすぎません。マイクロソフトは、nugetシステムを使用することをお勧めします。一般に、nugetシステムにうんざりしていて、GACをより良い代替策となるのに十分な時間使用するのに慣れていない限り、SOの未知のプログラマーよりもそれらを聞くことをお勧めしますあなたのために。各プロジェクトのnugetを再度ダウンロードし、それによって引き起こされるすべての迷惑なバグを負担します(少なくとも、私がついにうんざりしてファイルをGACに配置したときに発生していました)。どちらのアプローチも頭痛を与え、問題を引き起こす可能性があります。これは、どの問題を処理したいかという問題にすぎません。マイクロソフトは、nugetシステムを使用することをお勧めします。一般に、nugetシステムにうんざりしていて、GACをより良い代替策となるのに十分な時間使用するのに慣れていない限り、SOの未知のプログラマーよりもそれらを聞くことをお勧めしますあなたのために。各プロジェクトのnugetを再度ダウンロードし、それによって引き起こされるすべての迷惑なバグを負担します(少なくとも、私がついにうんざりしてファイルをGACに配置したときに発生していました)。どちらのアプローチも頭痛を与え、問題を引き起こす可能性があります。これは、どの問題を処理したいかという問題にすぎません。マイクロソフトは、nugetシステムを使用することをお勧めします。一般に、nugetシステムにうんざりしていて、GACをより良い代替策となるのに十分な時間使用するのに慣れていない限り、SOの未知のプログラマーよりもそれらを聞くことをお勧めしますあなたのために。


40
GACにあるとは限りません。Nugetアプローチの背後にある重要なポイントは、ホストシステムで何も変更せずに、プロジェクトで特定のバージョンのC#またはVB.NETを使用することです。MSFTのDamian Edwardsからのこの投稿を参照してください:blogs.msdn.microsoft.com/webdev/2014/05/12/…–
Sudhanshu Mishra

29
これらのアセンブリはGAC期間に属していません。それらをGACに配置すると、コードを保守する必要のある人が間違ったコンパイラーが使用されている理由を判別できない場合、最終的に頭痛の種となります。
EKW 2016年

5
マイクロソフトのコメントは-1。それは、最近それをするのがクールであるかのようです。ところで、nugetsには多くの利点があり、それらは非常に人気があり、単に無視しています。マイクロソフトの紳士がこれについてどう思うか想像してみてください。
Fabio Milheiro 2017

2
@YuvalPerelmanマイクロソフトは過去3〜4年間、多くの破壊的なことを行っています(Visual Studioを不安定にし、非常に低品質の製品を製造するなど)。開発部門の経営陣全員が解雇されることを祈っています。しかし、それは間違いなくそのケースではありません!
マリス

2
この依存関係をGACすることは、私がしばらく見てきた中で最も素晴らしいことです。
スベン

31

次のnugetパッケージをプロジェクトに追加するだけです- Microsoft.CodeDom.Providers.DotNetCompilerPlatform

同じ問題があった。


少し注意してください。web.config内の 'compilerOptions'を上書きするので、インストールする前にカスタム値を保存してください。
Radderz、2018

19

私のアプリがVs2013で機能したのと同じ問題がありますが、Vs2015に更新した後にエラーが発生します。

  1. Vs2015で、プロジェクトのReferencesフォルダーを右クリックして、NuGet Package Managerを開きます。
  2. [参照]タブで、「DotNetCompilerPlatform」を検索し、「Microsoft.CodeDom.Providers.DotNetCompilerPlatform」libをインストールします

2
プロジェクトのReferencesフォルダーを右クリックしてパッケージマネージャーを開く
ヒントをありがとう

3
最初にアンインストールしてから、NuGetに再度インストールしてください。それでうまくいきました。
Matt、

あなたは伝説です
Mo Dジェネシス

16

古いスレッドであることはわかっていますが、DotNetCompilerPlatform.dllのバージョンの問題の可能性を指摘したいと思います。例。更新後。新しく生成されたWeb.configファイルがリリースされたweb.configと異なるかどうか、特にsystem.codedom部分を確認してください。私の場合、それは1.0.7から1.0.8へのバージョン変更でした。新しいdllはすでにサーバーにコピーされていますが、古いweb.configを変更しませんでした(サーバーの特別な設定がいくつかあります)。

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

2行を更新した後、エラーが消えました。


1
私はDotNetCompilerPlatformとの問題を抱えて、すべて 単一 の時間、私はそれを更新します。
LarryBud

2
バージョン属性を削除すると、も機能し、次の更新時にエラーが再び発生するのを防ぎます。
MiguelSlv

同じ問題がありましたが、それをから更新しなければなり2.0.02.0.1
ませんでし

12

あなたの再現手順によると、アプリケーションのプロパティで出力パスを変更することが、アプリケーションを作成した後の唯一の変更であると想定しました。この変更が行う唯一のことは、MSBuildの出力アセンブリを新しいフォルダーに配置するようにVisual Studioに指示することです。ただし、実行時には、ASP.Netは、\ binフォルダーではなく、この新しいフォルダーからアセンブリを読み込む必要があるとは考えません。

この答えは、WebApiアプリケーションのビルド出力ディレクトリを変更する方法を示しています。その投稿で示されたまったく同じエラーを取得するには、web.configの<system.codedom>セクション全体をコメント化する必要があります。そして、指示に従って出力パスを変更できます。

アプリケーションを動作させたら、<system.codedom>セクションのコメントを解除できます。アプリケーションでC#6の新しい構文をまったく使用しない場合は、アプリケーションからMicrosoft.CodeDom.Providers.DotNetCompilerPlatformをアンインストールできます。それ以外の場合は、ビルド後のイベントに次のコマンドラインを追加できます。

xcopy /Q /Y "$(TargetDir)roslyn\*.*" "$(TargetDir)..\roslyn\"

新しいCodeDomプロバイダーは、常に\ bin内の "\ roslyn"フォルダーを探します。上記のコマンドは回避策として機能し、\ roslynフォルダーを新しい出力フォルダーから\ binにコピーします。

しかし、私の実験では、Visual Studioの発行ツールは、出力パスの設定に関係なく、出力場所を展開場所の\ binフォルダーに発行しました。私はあなたのアプリケーションが実際の展開で動作するはずだと思います。


10

簡単な方法- プロジェクト> NuGetパッケージの管理...>参照(タブ)>検索入力でこれを設定:Microsoft.CodeDom.Providers.DotNetCompilerPlatform

このコンパイラをインストール、更新、またはアンインストールしてインストールできます

DotNetCompilerPlatform


8

別の可能な解決策:

管理者権限で Visual Studioインスタンスを再起動します

ここに画像の説明を入力してください


4

本番サーバーで公開した後、停止しました。このエラーが表示された理由は、サブフォルダーにデプロイされたためです。IISでは、サブフォルダーを右クリックして[アプリケーションに変換]を実行しましたが、その後機能しました。


アプリケーションに変換するだけで十分でした。(これは、以前に公開されていない新しいプロジェクトでした。)
Patrick

サブフォルダーを使用することも私の問題だったので、ベースフォルダーに移動すると、問題が発生し始めました。
J_L

4

私の場合、これはアプリケーションフォルダーの権限を変更したときに発生し、アカウントIIS_IUSRSが削除されました。IIS_IUSRS(IIS Manager-> YourWebApp-> Edit Permission-> Add IIS_IUSRS)をアプリケーションフォルダーに再度追加した後、機能しました。


IUSR権限を追加しましたが、十分ではありませんでした。「IIS_IUSRS」を追加する必要があり、それが機能しました。
zacharydl 2018年

3

解決方法は次のとおりです。

  1. を削除しました binプロジェクトディレクトリのフォルダをました。
  2. をクリックしBuild Solutionます。でVS2017(管理者として実行)>ビルド>ビルドソリューション


2

ソリューションに多数のプロジェクトがあり、Webプロジェクト(このエラーの問題)がスタートアッププロジェクトとして設定されていません。このWebプロジェクトをスタートアッププロジェクトとして設定し、メニュー項目[デバッグ]-> [デバッグの開始]をクリックすると、機能しました。私はデバッグを停止してからもう一度試しましたが、今は正常に動作しています。変だ。


2

その後、問題が再発しました。私は両方をアンインストールMicrosoft.CodeDom.Providers.DotNetCompilerPlatformしましたUninstall-package Microsoft.Net.Compilersが、助けはあり ませんでした。その後、インストール-ヘルプはありません。プロジェクトをクリーンアップし、ヘルプを作成しませんでした。サーバーを再起動しても何の助けにもなりませんでした。その後、プロジェクトには現在1.0.5ではなく1.0.3である最新のプロジェクトは必要ないことに気付きました。だから私は代わりにそのdllバージョンをインストールし、今それは動作します。


1

ASP.NETはbin/debug、他の種類のアプリケーションのように、アセンブリのビンの下のサブフォルダーを検索したり、検索したりしません。次の構成を使用して、別の場所を探すようにランタイムに指示できます。

<configuration>
   <runtime>   
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin\Debug;bin\Release"/>
      </assemblyBinding>
   </runtime>   
</configuration>

1

プロジェクトの「Microsoft.CodeDom.Providers.DotNetCompilerPlatform」および「Microsoft.Net.Compilers」パッケージを更新する必要があります。


1

私の場合、4.5.2にWebアプリケーションがあり、4.6.1に参照されているクラスライブラリがあると、エラーが発生しました。Webアプリケーションを4.5.2バージョンに更新すると、エラーは発生しなくなりました。


Umbraco 8をインストールするときに、4.5.2(デフォルトVS 2017)ではなく間違った.Netバージョン(4.7.2が必要)で実際に同じエラーが発生しました
Bunkerbuster

1

アプリケーションプールユーザーがApplicationPoolIdentityに設定されていたため、このエラーが発生しました。フォルダーにアクセスできるユーザー/サービスアカウントに変更したところ、エラーは発生しなくなりました。


1

これが私の発見です。今日の朝、私もこの問題に直面しました。アプリケーションを実行しているアプリケーションプールに現在のユーザーを追加しました。

手順:

  1. IISを開く

  2. アプリケーションプールをクリックします

  3. 問題が発生しているアプリケーションプールを選択します

  4. 右クリック->詳細設定

  5. IDの横にある3つのドットのアイコンをクリックします

  6. 次に、カスタムアカウントを選択します

  7. PCのユーザー名とパスワードを入力します

  8. 保存する

アプリケーションを更新すると、動作します。dllへのアクセスに関するセキュリティの問題がありました。


1

以下のコマンドからパッケージマネージャーコンソールからパッケージをアンインストールするだけです

PM>アンインストールパッケージMicrosoft.CodeDom.Providers.DotNetCompilerPlatform

PM> Microsoft.Net.Compilersのアンインストールパッケージ

そして、それをnuget managerから再度インストールします ここに画像の説明を入力してください


1

最近Microsoft.CodeDom.Providers.DotNetCompilerPlatformパッケージをインストールまたは更新した場合は、プロジェクトで参照されているそのパッケージのバージョンが、そのパッケージの正しい同じバージョンを指していることを再確認します。

  • ProjectName.csproj、ことを確認<Import>するためのタグがMicrosoft.CodeDom.Providers.DotNetCompilerPlatform正しいバージョンに存在し、点です。

  • ProjectName.csprojことを確認<Reference>するためのタグがMicrosoft.CodeDom.Providers.DotNetCompilerPlatform存在し、両方で正しいバージョンを指し、Include属性と子<HintPath>

  • そのプロジェクトweb.configので、<system.codedom>タグが存在し、その子<compiler>タグのtype属性に同じバージョンがあることを確認してください。

何らかの理由で、私の場合には1.0.5から1.0.8へのこのパッケージのアップグレードが原因<Reference>で、タグを.csprojその持っているInclude古いバージョン1.0へのポインティングを。5 .0(パッケージのアップグレード後に削除したもの)ですが、それ以外のすべては新しい正しいバージョン1.0を指しています。8 .0。


1

プロジェクトが完全にビルドされていることを確認してください!

「出力」タブをクリックして、次のようなものがないことを確認します。

==========すべて再構築:14成功、1失敗、0スキップ=========

そしてあなたの binフォルダーを、それが最新かどうかを確認してください。

私は最初は無視した多くのタイプスクリプトエラーを抱えていましたが、それらがビルドを壊し、DLLがコピーされなかったことを忘れていました。


1

CppCodeProviderアセンブリへの参照を追加します。


1

私の場合、Webプロジェクトが適切に読み込まれていません(プロジェクトが利用できないと表示されていました)。管理モードでビジュアルスタジオを開いた後、Webプロジェクトを再読み込みする必要があり、すべてが正常に機能しました。



0

私たちが遭遇した例外はローカルではなくリモートサーバーで、Azure CIはそれをパッケージフォルダーから読み取っていましたが、上記のコンパイラバージョンが見つかりませんでした。

これを修正するために、プロジェクトファイルを次のように変更しました

ここでは、環境変数を直接参照しているパッケージを参照していません。

これで問題が解決しましたが、私たちの場合、「package.config」から直接パッケージを使用せず、チーム全体でバージョンの整合性を維持するために別のフォルダーを用意しています。


0

開始コマンドからinetmgrに移動しますIISマネージャーコンソールで、既定のWebサイトの下のアプリケーションフォルダーを選択し、そのフォルダーを右クリックして、アプリケーションに変換します。有効にして.asmxファイルを実行します。


0

BINフォルダが完全にアップロードされているか、ファイルにないかを確認します。


私もasp.netの新機能である同じ問題に直面しています
Prashant Pimpale

0

このエラーに関して私が試しました:

  • プロジェクトのクリーニングと再構築
  • プロジェクトのアンロードと再ロード
  • ターゲットフレームワークの変更
  • 出力パスの変更
  • GACへのナゲットの追加
  • パッケージuninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform uninstall-package Microsoft.Net.Compilersを削除して再度インストールする。

これらはすべて有効な解決策のようですが、私は新しいエラーを生成することしかできませんでしたが、最終的には、特定の参照/ナゲットが欠落しているときにエラーが表示されるようです。

私の場合、私は最近Microsoft Officeを再インストールし、Microsoft.Office.Coreのようなアセンブリを参照していました。新しいインストールには必要なパッケージが含まれていないようでした。そのため、私のソリューションは正しくビルドできませんでした。

Microsoft.Officeを参照する必要がなくなるまでコードを作り直すことでこの問題を解決できましたが、必要なパッケージを検索してそれに応じてインストールすることで解決できました。

Visual Studioからの不明確なエラーメッセージのようです。


0

プロジェクトで作業していて、これが今エラーとしてポップアップした場合。コンピューター(または私の場合はサーバー)を再起動すると、問題が解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.