私はASP.NET Core MVC 3.0 Webサイトを公開しており、出力フォルダーにはMicrosoft.CodeAnalysis
ライブラリへの多くの言語での参照がたくさん含まれています。誰かがその理由を知っていますか?
もちろんFxCopAnalyzers
Nugetパッケージはプロジェクトにインストールされていますが、以前のバージョンのプロジェクトでは公開されていません。開発時にのみ役立つはずなので、なぜそれが今なのか理解できません。本番環境で。
microsoft.CodeAnalysisライブラリへの多くの言語での参照が多数含まれています
3.0バージョンを使用したときにも同じ問題が発生しました。しかし、release/2.1
ブランチに View ViewCompilation も含まれているため、パブリケーションで.netコア3コンパイルビューが原因であるとは考えていません。
実稼働環境ではなく、開発時にのみ役立つはずです。
私はあなたが正しいと信じています。これらの分析は、開発時にのみ使用する必要があります。
ただし、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が取得されなくなります。
私にとっては、この行は*.csproj
ファイルは問題をどうにかして解決しました。 Microsoft.CodeAnalysis
、ただしen
のみ:
<PropertyGroup>
<!-- ... -->
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
Githubの問題について コメント (Jonathon Marolfによる)を参照してください。
これが、ソリューションをより見やすくするための私の見解です。
問題は、おそらくAddRazorRuntimeCompilation()
の使用です。より具体的には、startup.csで次のようにかみそりランタイムコンパイルを追加する可能性があります。
_ IMvcBuilder builder = services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
_
そしてそれをサポートするために、あなたのウェブプロジェクトはおそらく_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" />