パスの一部が見つかりませんでした…bin \ roslyn \ csc.exe


813

TFSソース管理から取得したAsp.net MVCプロジェクトを実行しようとしています。すべてのアセンブリ参照を追加したので、エラーや警告なしで正常にビルドおよびコンパイルできます。

しかし、ブラウザに次のエラーが表示されます。

パス「C:\ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe」の一部が見つかりませんでした。

エラーページの完全なスクリーンショットは次のとおりです。

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

数日の調査の結果、Roslynは高度なコンパイル機能を提供する.Netコンパイラプラットフォームであることがわかりました。ただし、Roslynに関連するものを何も構成していないか、プロジェクトでRoslynを使用する予定がないため、ビルドが\ bin \ roslyn \ csc.exeを検索しようとしている理由がわかりません。


10
コンパイルされたASP.NETアプリケーションの実行の一部としてこれが必要な理由を誰かが説明できますか?csc.exeを使用する目的は何ですか?
gregmac 2015年

1
:私は、これはロスリン関与説明だと思うblogs.msdn.microsoft.com/webdev/2014/05/12/...
andy250

4
私は、以下のインストール・パッケージMicrosoft.CodeDom.Providers.DotNetCompilerPlatformインストールすることで、それを固定したフォルダロスリンフォルダはbinにコピーされていませんでした
アブドラタハン

12
Microsoft.CodeDom.Providers.DotNetCompilerPlatformを再インストールすると問題が解決しました。
SurenSaluka

4
VS 2019でプロジェクトを開いた後、これが発生していました。以前はVS 2017で動作していました。Microsoft.CodeDom.Providers.DotNetCompilerPlatformを以前のバージョンにダウングレードしてから最新バージョンに戻すだけで問題が解決することがわかりました。それは私の.csprojファイルのいくつかの問題を修正しました。
Neo

回答:


436

デフォルトのVS2015テンプレートの問題は、コンパイラが実際にtfr \ bin \ roslyn \ディレクトリにコピーされるのではなく、{outdir} \ roslyn \ディレクトリにコピーされることです。

このコードを.csprojファイルに追加します。

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

9
これは私の問題を解決しません。これで、「ファイル 'C:\ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe」が見つかりませんでした。VS2015で新しいMVCプロジェクトを作成すると、.csprojに上記の構成が表示されず、ブラウザーで完全に正常に実行されることに注意してください
Eyad

4
ありがとう。Roslynディレクトリをダウンロードして/ binフォルダーに配置した後、ブラウザーでプロジェクトをビルドして実行できるようになりました。上記のPstBuildEventを配置しませんでしたが、まだ機能します。上記の回答を編集して、Roslynファイルを手動で配置し、解決策をより適切に反映する必要性について言及したい場合があります。
Eyad、2015

2
まあ、通常の状況では。$(OutDir)roslyn *。*フォルダー内にコンパイラーがあるはずです。そのため、このスクリプトはコンパイラーをプロジェクトのbinフォルダーにコピーします。どうやらvs2015のインストールにはコンパイラが含まれていませんでした。
ミッチェル

9
Microsoft.CodeDom.Providers.DotNetCompilerPlatformを1.0.8に更新すると、Microsoft.Net.Compilers 2.6.1が非常に役立ちました。この追加のターゲットを追加する必要はありませんでした。似たようなのように見えるのツーリングの後のバージョンで追加されました:github.com/aspnet/RoslynCodeDomProvider/commit/...
イアン・ロバートソン

5
Microsoft.Net.CompilersのバージョンをNugetからバージョン2.10.0に更新しましたが、それが私の解決策でした。私はtargetFramework = "4.6.2"を使用しています
juanytuweb

1163

TL; DR

これをパッケージマネージャーコンソールで実行します。

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

詳しくは

この問題はVisual Studio自体とは関係がないため、ファイルをコピーするためのビルドステップを追加することを提案する回答は、回避策です。プロジェクトに手動でコンパイラバイナリを追加する場合も同様です。

RoslynコンパイラはNuGetパッケージに由来し、そのパッケージの一部のバージョンにはバグがあります(バグはあったかどうかはわかりません)。解決策は、そのパッケージをバグのないバージョンに再インストール/アップグレードすることです。もともと2015年に回答を返す前に、特定のバージョンで次のパッケージをインストールすることで修正しました。

  • Microsoft.Net.Compilers 1.1.1
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1

次に、.csprojを調べて<ImportProject>、上部のタグ内と<Target>下部の「EnsureNuGetPackageBuildImports」という名前で、パッケージへのパスが正しい(私の場合は.. \ .. \ packages \ *。*)ことを確認しました。これは、MVC 5および.NET Framework 4.5.2にあります。


11
これは私の問題でした-プロジェクトの作成時にbin / roslynフォルダーが存在しますが、プロジェクトを削除したり、ソース管理のようにコピーしたりしないと、再ビルドされません。バージョンに「同期」の問題が少しあると思います。1.0.1がインストールされ、projファイルのインポートが正しいバージョンに更新されると、ビルドは自動的にRoslynフォルダをコピーします-これらの投稿は必要ありませんビルドコマンド。
Jester

16
これが最善の解決策だと確信しています... update-package -reinstall -projectname myprojectname
cr1pto

5
このすべてを行った後、私のプロジェクトには何も変わりませんでした。binフォルダーはまだフラット化されています。
ブライアリー2016年

8
1つのメモ:Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nugetパッケージのバージョン1.0.3が機能しますが、この質問ではバージョン1.0.6が原因でエラーが発生します。
Daniel Neel 2017

5
1.0.6にはバグがあります:github.com/aspnet/RoslynCodeDomProvider/issues/13
akatakritos

176

\bin\roslyn\csc.exe次のパッケージがプロジェクトに追加されているため、ビルドは検索を試みています。packages.configファイルを確認するだけで、両方をそこに置くことができます

Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers

Roslynとは何か、プロジェクトにそれらを追加した人(パッケージ):.net Framework 4.5.2を使用してVS2015を使用するプロジェクトを作成している場合、プロジェクトテンプレートがデフォルトでRoslynを使用していることに気付いたかもしれません。実際、Roslynは Microsoftの.NET言語用のオープンソースコンパイラの1つです。

Roslynを削除する必要がある理由: プロジェクトにRoslyn参照があり、サーバーを配置しないことに関心がある場合、多くのホスティングプロバイダーがサーバーをアップグレードしていないため、Roslynをサポートしていないため、Webサイトで不要なエラーが発生します。この問題を解決するには、プロジェクトテンプレートからRoslynコンパイラを削除する必要があります。

Roslynの使用に興味がない場合は、 次の手順に従って削除してください。

1. NuGetパッケージを削除し、Nugetパッケージコンソールから次のコマンドを使用します

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

2. これを実行すると、web.configファイルが自動更新されます。見つからない場合は、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>

28
新しいコンパイラと新機能を実際に使用したい場合、これは実際の解決策ではありません。
Matti Virkkunen 2017

14
あなたは未来に反対している。
チェンバレン

2
@cchamberlainなぜそれが未来なのですか?単純明快な使い方だと思いますが、多くの人が困っているようです。
Alisson 2017

1
@Alisson-Roslynは、物事が進んでいる方向です。これには、新しい言語機能が含まれ、パフォーマンスが高く、クロスプラットフォームで、オープンソースです。それは他のツールの後に出てきた-それゆえ将来。それを使用する必要があるとは何も言われていません。ほとんどのアップグレードにはいくらかの費用がかかります。「ASP.NETでRoslynをコンパイルする理由」を参照してください。セクション:blogs.msdn.microsoft.com/webdev/2014/05/12/…– cchamberlain 2018
1

1
MVCプロジェクトをGoDaddy共有Windowsホスティングに公開する場合、これが答えです。GoDaddyはcsc.exeのような実行可能ファイルを実行しません
Jeson Martajaya 19/12/12

141

クリーンとリビルドがうまくいきました!


4
掃除は必要ないと思います。この問題の議論によると、通常のビルドではなくビルドすると、常にroslynファイルが元に戻ります。 github.com/dotnet/roslyn/issues/15556
leemicw

また、Build> Rebuild Solutionを実行しただけで、エラーは解消しました。
マットメリル

再構築は私のために解決されました、出力でこれに気付きましたCopying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
m.edmondson

12
再構築だけではうまくいきませんでした。クリーン+再構築後、エラーは消えました。
Bruno Miquelin

2
DotNetCompilerPlatform 1.0.3、Microsoft.Net.Compilers 1.3.2、VS Pro 2017 15.9.4はこちら。Visual Studioを再起動する前後でも、クリーン/リビルドは機能しませんでした。最後に、「ビルド」>「バッチビルド...」>「すべてをリビルド」でトリックを実行しました。出力でbin / roslynディレクトリが欠落していたことをVSに確認させるには、適切な何もないことをささやいたに違いありません。
ヨハン

59

これは、これを行うためのよりMSBuildの方法です。

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

しかし、roslynファイルも(フォルダーではなく)binディレクトリにあることに気づきました。アプリは動作するようですが。


4
別の<Target>タグと同じレベルで、.csprojファイル内の任意の場所に配置できます。普段は下に向けます。
ロブキャノン

これは本当に受け入れられる答えになるはずです。これをソースにチェックインすると、リポジトリを引っ張る次の貧弱なシュマックが同じ問題を経験する必要がなくなります。
アンドリュークリア

37

GitHubのRoslynプロジェクトの問題で述べたように(私にとってはうまくいった)解決策は、Visual Studioでプロジェクトを単にアンロードして再ロードすることです。

「bin \ roslyn」フォルダは、プロジェクトを再ロードするまで、ビルドまたはリビルドで作成されませんでした。


ありがとう、それは私のために働いた。dotnetリポジトリの問題は2016年にオープンしましたが、Visual Studio 2019にもこの問題があります。それが本当であるとは信じられません!
フェリペオリアーニ

26

私はこれらの手順を実行し、それは完全に機能しました

  • すべてのbinおよびobjフォルダーを削除する
  • クリーンなソリューションと再構築
  • PowerShellでこのコマンドを実行する

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r


22

シガーなしですべての修正を試した後、Visual StudioでこのNugetパッケージを更新して修正しました。

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

鉱山は参考のために1.0.0から2.0.0でした(エラーは表示されなくなりました)


3
これは私にとってはウェルズでした。2.0.0でもプロジェクトには低すぎるため、2.0.1を要求しました。
yesman '10 / 10/05

3
これで解決しました。問題を修正したはずのダウングレードを行った後、最新に更新しました。
ダニエルジャクソン

1
私もこれをやった。これで、roslynフォルダーが出力パスに作成されました。また、csprojに "roslyn"参照がありません。それは可能性がそれはTarget Name="CopyRoslyn...私が持っているVS2015のものではなく、必要な内(のバージョン)2017です。注目に値すること:コピーターゲット(先ほど触れたもの)を追加するにDotnetCompilerPlatformを更新したので、csprojがきれいになりました。
LosManos

1
これはちょうど私に起こりました。この投稿は命の恩人です。同じエラーメッセージが繰り返し表示されますが、それは常にまったく異なる理由のようです。
Brian Knoblauch

19
  1. クリーンなソリューション
  2. ソリューションを再構築します。これらの2つの手順がうまくいきました。

ありがとう、これも私のために働いた。
ジョーイフィリップス

1
動作します。Ctrl Cブランチをチェックアウトしている最中に誤って押してしまいgit、リポジトリがめちゃくちゃになりました。 git reset --hard動作しなかったので、私git clean -xdfはプロジェクトを再構築する必要がありました。しかし、私はこのエラーに遭遇したので、単にプロジェクトをクリーンアップして再構築しただけで、うまくいきました。
ポールカールトン、

15

NuGetパッケージマネージャー

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFixをインストールする必要があり、そのエラーのために特別に作成された


これはうまくいきませんでした-私はパッケージが実際にはこの正確な目的のためではないと思います。
Drew Miller

私はVS 2017でテストしましたが、正常に動作します。他のバージョンの問題である可能性があります。
ファンアコスタ

11
ニックネームが「dsx」のランダムな人からランダムなパッケージをインストールしていません。それは大きなセキュリティです...
Mateusz

1
@Mateuszまたは私の非APS.NET [sic]フォルダー構造を修正するもの
Eliasar

14
  • プロジェクトを右クリックして、Nugetパッケージの管理を選択します。
  • 「Microsoft.CodeDom.Providers.DotNetCompilerPlatform」を検索します
  • 単純に古いバージョンまたは新しいバージョンに更新し(どちらでもかまいません)、元のバージョンに再度更新します。

これにより、パッケージのすべての依存関係とファイルが再インストールされます(csc.exeなど)。

Nuget-DotNetCompilerPlatform


これで解決しました!ありがとう!
メイソン

11

だから、ロブ・キャノンの答えは本質的に私にとってはうまくいったが、私はいくつかのオプションを微調整しなければならなかった。具体的には、ビルドサーバーでプロジェクトをビルドしているときに$ CscToolPathが空だったため、ターゲットの条件を削除し、インクルード属性を変更する必要がありました。不思議なことに、ローカルで実行する場合、$ CscToolPathは空ではありませんでした。

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

1
動作はさらに悪いです。ローカルで、パッケージフォルダーに移動して2つのフォルダーMicrosoft.CodeDom.Providers.DotNetCompilerPlatform.1.nnを削除し、コードをビルドすると、$ CscToolPathは空になります。2回目にビルドすると、空にはなりません。この問題は常に「最初のビルド」と見なされるため、ビルドサーバーでは常に発生します。コードは完全に機能しますが、Microsoft.Net.Compilersパッケージを更新する場合は、.csprojを更新する必要があります。ありがとうございました。
ジュリアンD.

3
Microsoft.Net.Compilersのバージョンが変更されると、このソリューションは失敗する(または調整する必要がある)ことに注意してください。
JanDotNet

Microsoft.CodeDom.Providers.DotNetCompilerPlatformをアップグレードしたところ、続行できました。
iowatiger08

10

nugetパッケージの更新がうまくいきましたソリューションを右クリック>ソリューションのNuGetパッケージを管理し、すべてのパッケージを更新します。特に、Microsoft.Net.CompilersMicrosoft.CodeDom.Providers.DotNetCompilerPlatformを更新し ます。


今回はこれでうまくいきました。欠落しているRoslyn / csc.exeエラーが常に表示され、解決策はかなり頻繁に異なります...
Brian Knoblauch

10

これは、既知の問題Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6。1.0.5にダウングレードすると、これが修正されました。


これは正しいです。Azureに発行するときにのみ、バージョン1.0.6でこの問題に遭遇しました。1.0.5へのダウングレードが機能する
Augusto Barreto 2017

2.0.0から1.0.5にダウングレードし、機能しました。しかし、私は当時七面鳥のサンドイッチを食べていたのでしょう。図を行きます。
barneymc


9

上記のダニエル・ニールのコメントによると:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nugetパッケージのバージョン1.0.3が機能しますが、バージョン1.0.6がこの質問のエラーの原因です

1.0.3にダウングレードすると、この問題は解決しました。


3
1.0.6にはバグがあります:github.com/aspnet/RoslynCodeDomProvider/issues/13
akatakritos

@akatakritosこれは役に立ちました。私は何時間も探していました。あなたがた両方に感謝します。
erincerol 2017

2
1.0.7は依然として特定のシナリオで影響を受けますgithub.com/aspnet/RoslynCodeDomProvider/issues/17
altso

1
1.0.5は私にとって有効な最新バージョンです(1.0.6および1.0.7がエラーを生成しています)
Patrick

同じように、私は1.0.7でしたが、機能しません。1.0.3は機能します。この問題で私の人生の最後の1時間を無駄にしたばかりで、もう問題はないので、これ以上は何も試していません。
フィリップストラットフォード

9

私の場合、JenkinsがOctopusにデプロイしようとしたときに次のエラーで問題が発生しました:

MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri..ctor(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable`1 sourceFiles, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED

原因

しばらく時間を費やした後、私はを使用していた内部開発コンポーネントを使用していましたMicrosoft.Net.Compilers。内部コンポーネントが使用していた理由は、Microsoft.Net.Compilersこの問題を克服するためであり(C#:無効な式のコンパイルをスローする)、この方法で解決されました(Visual Studio 2015でC#7を使用する方法?)。この結果、メインプログラムにコンポーネントをインストールすると、Microsoft.Net.Compilers自動的に追加されます。

解決

私の回避策は、(@ malikKhalilの回答に従って)内部コンポーネントから以下をアンインストールすることでした

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

そして、C#6の代わりにJenkinsのC#7コンパイラを選択して再ビルドしました。これは、すべてが正しく機能し、ビルドされていることを確認するためです。

ようやくメインプログラムで、内部コンポーネントを更新しようとしました。そして、すべてが再構築されます。問題なく構築されています。


8

私の場合、Visual Studio Solution Explorer(Webアプリケーションプロジェクト)のbinディレクトリに移動して、roslynプロジェクトを直接含める必要がありました。フォルダを右クリックして、[プロジェクトに含める]を選択します。ソリューションを再度チェックインして、ビルドプロセスをトリガーします。

roslynフォルダーはデフォルトでは含まれていませんでした。


7

プロジェクトの実行中にも同じ問題が発生していました。ここに私が従ったステップがあります。

  1. ソリューションを右クリック
  2. クリーンソリューションを選択
  3. クリーンが成功した後、もう一度プロジェクトをビルドします
  4. プロジェクトを再度実行します

今回は同じエラーは表示されませんでした。これは期待どおりに機能します。


同僚は、コンソールからのNuGetパッケージの更新は機能するが、これはコマンドを実行しなくても機能すると報告しました。私の選んだ答え。
tsemer

7

Microsoft.CodeDom.Providers.DotNetCompilerPlatform1.0.0から1.0.1にアップグレードすると、これが修正されました。


6

プロジェクトファイルを開いて削除 Import Project = ".. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....をすべての参照をします。

web.configを開き、すべてのsystem.codedomコンパイラー属性を削除します


6

すでに述べたようで/programming/32780315#34391473、クイックフィックスは、パッケージマネージャを使用することで、 Tools> Nuget Package Manager> Package Manager Console、実行します

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

パケットマネージャーコンソール-開く方法

ただし、代替の解決策(パッケージが欠落している場合にパッケージを自動的かつサイレントに再作成する)は、プロジェクトのWeb.configファイルの属性を削除することです。
Web.config.csprojファイルと同じディレクトリにあります。)

Web.configテキストエディター(またはVisual Studio内)でファイルを開きます。
-タグでconfiguration> system.codedom> compilers> compiler language="c#;cs;csharp"、完全に削除type属性を。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ... -->
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.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.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

つまり、で始まる行を削除しtype="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoftます。

(おそらく、同じ修正がVisual BasicとCsharpの両方で機能しますが、私は試していません。)

残りはVisual Studioが処理します。もうServer Error in '/' Application

上記のzipファイルで提供したサンプルコードでは、+をHTTP Error 403 押したときに表示されます。CtrlF5

HTTPエラー403.14-禁止

http://localhost:64195Webブラウザーでに置き換えてみてくださいhttp://localhost:64195/api/products
Web APIは次のように表示されます。

製品を含むWeb API

挑発としてpackage、Visual Studioソリューションのディレクトリ全体を削除してみました。
それを(再)構築するとすぐに、自動的に静かに再作成されました。


最後になりましたが、ここにエラーを再現するコードがあります:http : //schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip(元はhttps://github.com/aspnet/AspNetDocs/tree/master/aspnetから / web-api / overview / advanced / calling-a-web-api-from-a-net-client / sample / server / ProductsApp

サーバーエラー


6

私の場合、binフォルダー内のすべてを削除して再コンパイルするだけで、すべての作業が完了しました。


2
これはもっとシンプルで効果的だと思います。通常、リポジトリから新しいコンピューターにプロジェクトを複製した後、このエラーが発生します。
ジョナサンオルテガ

これを試した後、デバッガで実行しているときにIIS Expressから403 Forbiddenを取得しました。Visual Studioを再起動しても効果はありませんでしたが、Windowsを再起動すると効果がありました。
Florian Winter

5

このStackOverflowの質問のように、MSPでRazorビューをコンパイルするためにASPNETCOMPILERを追加していた場合は、PhysicalPathを変更して、Roslyn nugetパッケージが配置されている場所に配置します(通常は$ CscToolPath変数でポイントされます)。

<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />


5

デフォルトのVS2015テンプレートの問題は、コンパイラが実際に{outdir}_PublishedWebsites\tfr\bin\roslyn\ディレクトリにコピーされるのではなく、{outdir}\roslyn\ディレクトリにコピーされることです。AppHarborソリューションを「インプレース」で構築するのではなく、出力ディレクトリを使用してアプリを構築するため、これはローカル環境とは異なる可能性があります。

修正するには、.csprojXMLブロックの直後のファイルの終わり近くに次を追加します<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>

<PropertyGroup>
  <PostBuildEvent>
    if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
    start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
  </PostBuildEvent>
</PropertyGroup>

リファレンス:https : //support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise


1
/ dオプションは、新しいファイルのみをコピーします(「日付」を表します)。時刻が現地時間よりも遅れている/遅れている可能性がある場所であるクラウド/アズールにデプロイすることを覚えておいてください。
マックス

4

私の場合、Basimと同様に、C#6が必要であることをコンパイラに通知するNuGetパッケージがありました。

NuGetパッケージを削除する必要がMicrosoft.CodeDom.Providers.DotNetCompilerPlatformあり、それを削除しました。

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> packages.configファイルから
  2. <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> </system.codedom>

system.codedom、それはロザリンもたらした理由ノード、あなたが見ることができます:compilerOptions="/langversion:6


1
NuGetパッケージ "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"をアンインストールするだけで解決しました(私のプロジェクトは.NET 4.5.2を対象としています)。
BlueSky 2016

1
これでうまくいきました。また、この追加の依存関係を維持する理由がないため、Microsoft.Net.Compilersも削除する必要があります。
常に2016

4

ソリューションエクスプローラーのBinフォルダーを削除して、ソリューションを再度ビルドします。それで問題は解決します


ありがとう!それもうまくいきました。それに加えて、すべてのnugetパッケージを更新しました
Andre Kraemer

4

すべてがlocalhostで完全に機能しているときに、サーバーにアプリケーションをインストールするときに同じ問題が発生しました。

これらの解決策はどれも問題がなく、常に同じエラーが発生しました。

Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'

私はこれをやった:

  • 私のセットアッププロジェクトでは、右クリックして、表示>ファイルシステム
  • bin/roslynフォルダを作成する
  • 追加>ファイルを選択し、すべてのファイルを追加します packages\Microsoft.Net.Compilers.1.3.2\tools

これは私の問題を解決しました。


4

Windowsを再起動します。

これは、再構築、コンテンツの削除bin、再構築、Visual Studioの再起動を試みた後、私にとって有効な唯一のソリューションです。

これは、C#/。NETビルドツールがいかにひどいかを示すもう1つの例です。

(多くの回答を読んだ後)全体的な結論は、この問題の原因と解決策はセットアップとプロジェクトに大きく依存するため、ある回答が機能しない場合は別の回答を試してください。NuGetパッケージをいじったり、開発ツールを再インストールしたりする前に、最初に、Visual Studioの再起動、再起動、再構築などの非侵入型/破壊型ソリューションを試してください。幸運を!

(注:Visual Studio 2019を使用しており、プロジェクトファイルはもともとVisual Studio 2015で作成されたものです。これは、誰かが問題を調査するのに役立ちます)

(編集:これは、インストーラーが再起動を求めたときに、Visual Studioインストールのインストール/変更またはVisual Studioの更新後に再起動しないことが原因である可能性がありますか?)


3

私はcsprojファイルのないwebprojectを持っていて、ここで言及されている解決策は私にとってはうまくいきませんでした。

ターゲットの.NETフレームワークを変更し、パッケージを再インストール(Update-Package -reinstall)してからプロジェクトをビルドすると、うまくいきました。この操作の後でターゲットフレームワークを変更することもできます(nugetパッケージを後で再インストールするようにしてください)。


これは「ウェブサイトプロジェクト」です。このコマンドを使用して、1つのパッケージを再インストールしました:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.