私はASP.NET Core MVC 3.0 Webサイトを公開しています。出力フォルダーには、Microsoft.CodeAnalysis
ライブラリへの参照が多くの言語で多く含まれています。誰かがその理由を知っていますか?
もちろん、FxCopAnalyzers
Nugetパッケージはプロジェクトにインストールされていますが、以前のバージョンのプロジェクトでは公開されていなかったので、本番環境では開発時にのみ役立つはずなので、なぜ今なのかわかりません。
私はASP.NET Core MVC 3.0 Webサイトを公開しています。出力フォルダーには、Microsoft.CodeAnalysis
ライブラリへの参照が多くの言語で多く含まれています。誰かがその理由を知っていますか?
もちろん、FxCopAnalyzers
Nugetパッケージはプロジェクトにインストールされていますが、以前のバージョンのプロジェクトでは公開されていなかったので、本番環境では開発時にのみ役立つはずなので、なぜ今なのかわかりません。
回答:
Microsoft.CodeAnalysisライブラリへの多くの言語での参照が多数含まれています
3.0バージョンを使用したときにも同じ問題が発生しました。しかし、ブランチにView ViewCompilationもあるので、パブリケーションで.net core 3コンパイルビューが原因であるとは思いませんrelease/2.1
。
本番環境ではなく、開発時にのみ役立つはずです。
私はあなたが正しいと信じています。これらの分析は、開発時にのみ使用する必要があります。
しかし、SDK(3.0)を手動でアンインストールして最新のSDKを再インストールすると、それ以上再生できなくなります。なぜそうなるのかはわかりませんが、たぶん修正されました。それは別の理由が原因である可能性が高いです:誤ってMicrosoft.CodeAnalysisに依存する他のパッケージに追加の参照を追加しました)。とにかく、まずSDKを最新バージョンにアップグレードしてください。
もう1つの重要なことは、Visual Studioを使用してコントローラーを追加すると、Microsoft.VisualStudio.Web.CodeGeneration.Design
自動的に参照が追加されることです。このパッケージはMicrosoft.CodeAnalysis.Common
間接的にパッケージに依存しています。ここでMicrosoft.CodeAnalysis.Common
は、Microsoft .NETコンパイラプラットフォーム(「Roslyn」)が使用する共有パッケージを示します。このパッケージをダウンロードし、このlibを手動で解凍すると、次のようになりますMicrosoft.CodeAnalysis.dll
。
microsoft.codeanalysis.common.3.3.1 / ├───lib/ │└───netstandard2.0/ │├───... ... │├─── Microsoft.CodeAnalysis.dll │├───Microsoft.CodeAnalysis.pdb │├───Microsoft.CodeAnalysis.xml │└───... ... ├───パッケージ/ │└───...... └───_rels/
このパッケージはDev-Timeでのみ必要です。この依存関係を削除しないMicrosoft.CodeAnalysis
と、公開フォルダーに関連するDLLがかなり多くなります。
<ItemGroup>
<!-- this is not necessary when publishing -->
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.0.0" />
</ItemGroup>
に依存するパッケージを削除するMicrosoft.CodeAnalysis
と、Microsoft.CodeAnalysis
関連するDLL が取得されなくなります。
dotnet aspnet-codegenerator controlller ...
私にとって、*.csproj
ファイル内のこの行は問題をどういうわけか解決しました。それでもはデプロイされますが、次のMicrosoft.CodeAnalysis
場合のみですen
。
<PropertyGroup>
<!-- ... -->
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
Githubの問題に関するコメント(Jonathon Marolfによる)を参照してください。
ソリューションをより見やすくするための私の見解を以下に示します。
問題は、おそらくの使用ですAddRazorRuntimeCompilation()
。より具体的には、startup.csで次のようにかみそりランタイムコンパイルを追加する可能性があります。
IMvcBuilder builder = services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
それをサポートするために、あなたのWebプロジェクトはおそらく Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
そのnugetパッケージは依存関係Microsoft.CodeAnalysis
があり、発行フォルダーに不要な出力をすべて生成しています。
修正は、プロジェクトファイルを編集し、依存関係をデバッグモードで条件付きにすることです。
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
Version="3.1.0" Condition="'$(Configuration)' == 'Debug'" />
</ItemGroup>
そして、startup.csファイルで条件付きで次のように呼び出しますAddRazorRuntimeCompilation()
。
IMvcBuilder builder = services.AddControllersWithViews();
#if DEBUG
if (Env.IsDevelopment()) {
builder.AddRazorRuntimeCompilation();
}
#endif
これにより、これらのMicrosoft.CodeAnalysis
ライブラリはすべて、デバッグモードでコンパイルするときにのみ出力されます。したがって、リリースモードを使用してパブリッシュすると、出力の一部にはなりません。
多分これは誰かを助けることができるかもしれません、私の場合問題は「Microsoft.VisualStudio.Web.CodeGeneration.Desig」でした、私はExcludeAssets = "all"を含めるために ".csproj"ファイルのパッケージ参照を変更する必要がありました:
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" ExcludeAssets="All" />