TFSソース管理から取得したAsp.net MVCプロジェクトを実行しようとしています。すべてのアセンブリ参照を追加したので、エラーや警告なしに正常にビルドおよびコンパイルできます。
しかし、私はブラウザに次のエラーが出ます:
パス「C:\ B8akWorkspace\B8akProject\B8akSolution\B8AK.Portal\bin\roslyn\csc.exe」の一部が見つかりませんでした。
これはエラーページのフルスクリーンショットです。
数日の調査の結果、 Roslyn は高度なコンパイル機能を提供する.NETコンパイラプラットフォームであることがわかりました。しかし、私は自分のビルドがなぜ\ bin\roslyn\csc.exeを見つけようとしているのか理解できません。なぜなら、私はRoslynに関連するものを何も構成せず、プロジェクトでRoslynを使用するつもりもないからです。
デフォルトの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>
私の場合、解決策はNugetパッケージを再インストール/アップグレードすることでした。
それから私は.csprojを調べ、一番上の<ImportProject>
タグの中と一番下の "VerifyNuGetPackageBuildImports"という名前の<Target>
の中で、パッケージへのパスが正しいことを確認しました(私の場合は..\..\packages\*。*)。これはMVC 5と.NET Framework 4.5.2にあります。
簡単な答え - パッケージマネージャコンソールでこれを実行してください:
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
次のパッケージがプロジェクトに追加されているため、ビルドは\bin\roslyn\csc.exe
を見つけようとしています。packages.config
ファイルを確認するだけで、両方をそこに含めることができます。
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
Roslynとは何ですか?また、Whoはプロジェクトにそれらを追加しました(パッケージ)。 VS2015を使用してプロジェクトを作成するために.net Framework 4.5.2を使用している場合実際、RoslynはMicrosoftの.NET言語用の オープンソース のコンパイラの1つです。
なぜRoslynを削除すべきですか: プロジェクトにRoslynの参照があり、サーバーなしでデプロイすることに興味がある場合、多くのホスティングプロバイダーがまだサーバーをアップグレードしていないためこの問題を解決するには、プロジェクトテンプレートから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=\"Web\" /optionInfer+"></compiler>
</compilers>
</system.codedom>
清潔で再構築が私のために働いた!
これを行う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ディレクトリーにもあることに気付きました。ただし、アプリは動作するようです。
あなたはMicrosoft.CodeDom.Providers.DotNetCompilerPlatform.BinFixをインストールする必要があります、特にそのエラーのために作成されました
葉巻なしですべての修正を試した後、私はビジュアルスタジオでこのNugetパッケージを更新することによってそれを修正しました:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
参照用にMineが1.0.0から2.0.0であった(エラーは表示されなくなった)
そう、 Rob Cannonの答え は本質的に私のために働いたが、私はオプションのほんの一握りを微調整しなければならなかった。具体的には、プロジェクトがビルドサーバー上でビルドされたときに$ CscToolPathが空だったため、ターゲットの条件を削除し、Include属性を変更する必要がありました。奇妙なことに、ローカルで実行しているときに$ 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>
私はこれらのステップに従った、そしてそれは完全にうまくいった
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
これは 既知の問題 with Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6です。 1.0.5にダウングレードすることでこれが解決しました。
上記のDaniel Neelのコメントによると:
microsoft.CodeDom.Providers.DotNetCompilerPlatform Nugetパッケージのバージョン1.0.3は私のために働きます、しかしバージョン1.0.6はこの質問のエラーを引き起こします
1.0.3にダウングレードすると、この問題は解決しました。
私の場合は、Visual Studioソリューションエクスプローラ(Webアプリケーションプロジェクト)のbinディレクトリに移動して、roslynプロジェクトを直接含める必要がありました。フォルダを右クリックして[プロジェクトに含める]を選択します。ソリューションをもう一度チェックインして、ビルドプロセスを開始します。
Roslynフォルダはデフォルトでは含まれていませんでした。
解決策のための解決策> NuGetパッケージの管理を右クリックし、すべてのパッケージを更新して特別に: Microsoft.Net.Compilers および Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.CodeDom.Providers.DotNetCompilerPlatformを1.0.0から1.0.1にアップグレードするとこれが解決しました。
私の場合、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コンパイラを選択して再構築します。これは、すべてが正しく機能し構築されていることを確認するためです。
私のメインプログラムでようやく私は私の内部コンポーネントを更新しようとしました。そして、再構築以外のすべてのもの。それは何の問題も問題もなく構築しました。
プロジェクトファイルを開き、Import Project = "..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ...を使用して remove all参照を選択します。
Web.configを開き、 remove すべてのsystem.codedomコンパイラの属性を開きます。
デフォルトのVS2015テンプレートの問題は、コンパイラが実際には{outdir}_PublishedWebsites\tfr\bin\roslyn\
ディレクトリにコピーされるのではなく、{outdir}\roslyn\
ディレクトリにコピーされることです。 AppHarbor
はソリューションを「インプレース」で構築するのではなく、出力ディレクトリを使用してアプリケーションを構築するため、これはおそらくローカル環境とは異なります。
これを修正するには、xmlブロック.csproj
の直後に<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>
このStackOverflowの質問 のように、MVCでRazorビューをコンパイルするためにASPNETCOMPILERを追加する場合は、PhysicalPathをRoslyn nugetパッケージが配置されている場所に配置するように変更します(通常は $ CscToolPath variableで示されます)。
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />
私の場合は、Basimと同様に、C#6が必要であるとコンパイラに伝えていたNuGetパッケージがありましたが、そうはしませんでした。
NuGetパッケージMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
を削除しなければなりませんでした。
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
<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=\"Web\" /optionInfer+" /> </compilers> </system.codedom>
system.codedom
ノードで、なぜそれがroslynをもたらしたのかを見ることができます:compilerOptions="/langversion:6
プロジェクトを実行している間も私は同じ問題を抱えていました。これが私が従ったステップです。
プロジェクトをもう一度実行します
今回は同じエラーが表示されません。これは期待通りに動作します
Csprojファイルがないwebprojectがあり、ここで説明した解決策がうまくいかなかった。
ターゲット.NETフレームワークを変更し、パッケージを再インストールし(Update-Package -reinstall
)、そしてプロジェクトをビルドすることは私にとってはうまくいきました。この操作の後でターゲットフレームワークを元に戻すこともできます(後でnugetパッケージを再インストールしても問題ありません)。
Windowsを再起動します。
これは、再構築、bin
のコンテンツの削除、再構築、Visual Studioの再起動を試みた後、私にとって有効な唯一のソリューションです。
これは、C#/。NETビルドツールがどれほどひどいものであるかを示すもう1つの例です。
回答の多くを読んだ後)、全体的な結論は、この問題の原因と解決策はセットアップとプロジェクトに大きく依存しているため、ある回答が機能しない場合は、別の回答を試してください。 NuGetパッケージをいじったり、開発ツールを再インストールしたりする前に、Visual Studioの再起動、再起動、再構築などの侵入/破壊的なソリューションを最初に。幸運を祈ります!
(注:Visual Studio 2019を使用し、プロジェクトファイルは元々Visual Studio 2015で作成されました。これは誰かが問題を調査するのに役立つかもしれません)
(編集:これは、インストーラーが再起動を促すプロンプトを表示したときに、Visual Studioインストールのインストール/変更後、またはVisual Studioの更新後に再起動しないために発生する可能性がありますか?)
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
からすべてのファイルを追加します。これで私の問題は解決した。
ソリューション内のすべてのプロジェクトからBinディレクトリを削除する以外に、objフォルダも削除します。
メインソリューションディレクトリで、フォルダ.vsを削除します。
既に完成したプロジェクトをgitで作成された空のソリューションに持ち込もうとしたとき、私のために働きました。
PropertyGroupを.csprojファイルに追加します。
<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>
ソリューションエクスプローラーでBinフォルダーを削除して、もう一度ソリューションをビルドします。それは問題を解決するでしょう
NuGetを通していくつかのパッケージを更新した後、私はこの問題に遭遇しました。 (通常のビルドではなく)再構築が私にとってうまくいった。
私の解決策は、Nugetを使用して以下の項目を最新バージョンに更新することです。 - Microsoft.Net.Compilers - Microsoft.CodeDom.Providers.DotNetCompilerPlatform次に、プロジェクトを再構築しました。私のプロジェクトはWebサイトなので* .csprojファイルはありません。上記のエラーは、ブラウザでcshtmlを表示しようとしたときに表示されます。
上記の2つの項目が最新のバージョンに更新された後に、エラーは修正されました。私はVS2015とwindows 7 SP1にいます
ちょっと….
2017/08/31現在、Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.7にアップグレードすることはできます。
GitHubのRoslynプロジェクトの問題 で述べたように、(私にとってはうまくいった)解決策は、単にVisual Studioでプロジェクトをアンロードして再ロードすることです。
プロジェクトをリロードするまで、 "bin\roslyn"フォルダはビルド時または再構築時に作成されませんでした。
DotNetCompilerPlatformを更新した後も同じ問題がありました。 Visual Studio>プロジェクトのクリーンアップ>プロジェクトのビルドを再起動することで解決します。
私はMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
1.06
だけでなく@PrisonerZEROでも機能する1.0.7
でもこのエラーがありました。しかし、Microsoftが1.0.8
2017-10-18をリリースしたとき、ついに私のために働き始めたので、ダウングレードする必要はありませんでした。
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/ /
私の場合、2つのビジュアルスタジオIDEを同時に実行していたときにこの問題が発生しました。それで解決策はプロジェクトをきれいにして他のインスタンスを閉じることでした。
MSBuildを実行しているJenkinsビルドサーバーでこのエラーが発生し、ビルドファイルが別のフォルダーの場所(_PublishedWebsites)に出力されます。まったく同じ - roslynフォルダはbinディレクトリにはなく、すべてのroslynファイルはbinファイルにまとめられていました。
@ igor-seminineの答え が私のために働いた唯一のものでした(私はC#6言語機能を使っているので、他の答えのように単純にnugetパッケージをアンインストールすることはできません)。デプロイメントターゲットサーバーで別のエラーが発生しました。
現在 "Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax"型に、 "Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax"型にマップされている、名前 ""のMicrosoft.CodeAnalysis.ICompilationUnitSyntax型に対して既存のマッピングを上書きする試みが検出されました。
これは、roslynファイルがメインのbinディレクトリにダンプされているので、xcopyを実行してそれらをネストされたroslynフォルダに再作成すると、これらのファイルの2つのコピーがコンパイルされ、衝突することがあるためです。 。多くのフラストレーションの後、私は「ハック」修正 - binディレクトリからこれらのファイルを削除する追加のビルド後タスクを決定し、競合を取り除きました。
問題のあるプロジェクトの.csprojは、次のようになりました。
...................もっとここに......................
<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>
<Target Name="DeleteDuplicateAnalysisFiles" AfterTargets="AfterBuild">
<!-- Jenkins now has copies of the following files in both the bin directory and the 'bin\rosyln' directory. Delete from bin. -->
<ItemGroup>
<FilesToDelete Include="$(WebProjectOutputDir)\bin\Microsoft.CodeAnalysis*.dll" />
</ItemGroup>
<Delete Files="@(FilesToDelete)" />
</Target>
...................もっとここに......................
私の状況では、私たちのチームは「パッケージ」フォルダーを保持したくないので、すべてのdllを「sharedlib」などの他のディレクトリーに入れます。
ビルドイベントを使用してこの問題を解決しました。
if "$(ConfigurationName)" == "Release" (
goto :release
) else (
goto:exit
)
:release
if not exist $(TargetDir)\roslyn mkdir $(TargetDir)\roslyn
copy /Y "$(ProjectDir)..\..\Shared Lib\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\tools\Roslyn45\*" "$(TargetDir)\roslyn"
goto :exit
:exit
これは以下の簡単な方法で行うことができます -
これに対する答えは、WebサイトプロジェクトとWebアプリケーションプロジェクトでは異なります。根本的な問題は、NuGetパッケージが異なるマシンで異なる動作をすることと同じです。 Roslynが新しいコンパイラであることをご存じのとおり、Binフォルダへのコピーを妨げるのは、権利の問題または何らかの実行ポリシーの可能性があります。あなたはこれらのプロジェクトのBinフォルダにそれを持っているべきですあなたのウェブサイトに行くNuGetパッケージはこのフォルダをチェックしてください?あなたはそれの中にcode\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\tools\RoslynLatestを見ることができます今、このFolderをコンパイルすることの一部としてあなたのウェブサイトにbinの下にコピーされるはずです。\code\WebSite1\Bin\Roslynいくつかの方法はあなたのために起こっていません。管理者としてVisual Studioを実行してみてください。手動でRoslynフォルダをコピーします。 NuGetパッケージのアンインストールとインストールを試してください。このパッケージはあなたのフォルダをコンパイルすることを覚えておいてください、そして、そこになければ何もコンパイルすることができないので、あなたも何も追加することができません。このパッケージをオフラインバージョンのツールにコピーしてみてください - >オプション - > nugetパッケージマネージャ - >パッケージソース - > Microsoft Visual StudioオフラインパッケージC:\ Program Files(x86)\ Microsoft SDKs\NuGetPackages
私はソリューションといくつかの含まれているプロジェクトの名前を変更し、そして核となるパッケージを削除することで遊んだ後、私はこのエラーを経験しました。私は新しいプロジェクトを最後の作業中のプロジェクトと比較したところ、次の行が欠落していたので追加し直す必要があることがわかりました。
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
そうすることで問題は解決しました。
私は、発行パイプライン(_PublishedWebsitesディレクトリを作成する)でこの問題に遭遇し、これをプロジェクトのターゲットとして使用しました。
<Target Name="CopyRoslynCompilerFilesToPublishedWebsitesDirectory" AfterTargets="AfterBuild" Condition="Exists('$(OutDir)\_PublishedWebsites\$(TargetName)')">
<Copy SourceFiles="@(RoslyCompilerFiles)" DestinationFolder="$(OutDir)\_PublishedWebsites\$(TargetName)\bin\roslyn" ContinueOnError="true" SkipUnchangedFiles="true" />
</Target>
欠点は、出力にRoslynファイルの2つのコピーがあることです。
NuGet PMは、Rosalynの動作を中断します。 Tools > NuGet Package Manager > Manage NuGet Packages for Solution
をクリックします。更新がMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
、Microsoft.Net.Compilers
、またはMicrosoft.Net.Compilers.netcore
に対して存在する場合、それらを更新します。解決策は壊れます!これは、ASPサイトテンプレートがプロジェクトの作成時に特定のバージョンを使用するように設定されているために発生します。問題を確認するには、ソリューションエクスプローラーで[すべてのファイルを表示]をクリックします。
プロジェクトの作成時に$(WebProjectOutputDir)\bin
は存在しません。そのため、RosalynがNuGetによって依存関係として追加されると、それは正しくインストールされます。ソリューションパッケージを更新すると、$(WebProjectOutputDir)\bin
ディレクトリは次のようになります。
$(WebProjectOutputDir)\bin\bin\rosalyn
最も簡単な解決策は、ロザリンを適切な場所にカットアンドペーストしてから、余分なbin
フォルダを削除することです。これでページを更新でき、サイトがロードされます。
私はビューを構築しないようにWebAPIとMVCプロジェクトファイルを変更しなければなりませんでした:
<MvcBuildViews>false</MvcBuildViews>
これにより、roslynに関するTFS 2015 Buildサーバーエラーが解決されました。 csc.exeが\ bin\csc.exeにコピーされた理由がまだわかりませんが、それでも公開プロセスは\ bin\Roslyn\csc.exeを探していました...その矛盾の原因となる変換を見つけることができませんでした。
私の場合は、binフォルダ内のすべてを削除して再コンパイルするだけで、すべての作業が完了しました。
この問題を抱えている人には幸運を祈ります。