web-dev-qa-db-ja.com

Microsoft.CodeAnalysisがASP.NET Core Webサイトで公開されるのはなぜですか?

私はASP.NET Core MVC 3.0 Webサイトを公開しており、出力フォルダーにはMicrosoft.CodeAnalysisライブラリへの多くの言語での参照がたくさん含まれています。誰かがその理由を知っていますか?

もちろんFxCopAnalyzers Nugetパッケージはプロジェクトにインストールされていますが、以前のバージョンのプロジェクトでは公開されていません。開発時にのみ役立つはずなので、なぜそれが今なのか理解できません。本番環境で。

12
Jonathan

microsoft.CodeAnalysisライブラリへの多くの言語での参照が多数含まれています

3.0バージョンを使用したときにも同じ問題が発生しました。しかし、release/2.1ブランチに View ViewCompilation も含まれているため、パブリケーションで.netコア3コンパイルビューが原因であるとは考えていません。


実稼働環境ではなく、開発時にのみ役立つはずです。

  1. 私はあなたが正しいと信じています。これらの分析は、開発時にのみ使用する必要があります。

  2. ただし、SDK(3.0)を手動でアンインストールし、最新のSDKを再インストールすると、これ以上は再現できません。なぜそうなったのかはわかりません。たぶん、現在は修正されています。それは別の理由が原因である可能性が高いです:私は誤ってMicrosoft.CodeAnalysisに依存する他のパッケージに追加の参照を追加しました)。とにかく、まずSDKを最新バージョンにアップグレードしてください。

  3. もう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が取得されなくなります。

    enter image description here

5
itminus

私にとっては、この行は*.csprojファイルは問題をどうにかして解決しました。 Microsoft.CodeAnalysis、ただしenのみ:

<PropertyGroup>
  <!-- ... -->
  <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>

Githubの問題について コメント (Jonathon Marolfによる)を参照してください。

6
mrmowji

これが、ソリューションをより見やすくするための私の見解です。

問題は、おそらく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_ライブラリはすべて、デバッグモードでコンパイルするときにのみ出力されます。したがって、リリースモードを使用してパブリッシュすると、出力の一部にはなりません。

2
Ron C

多分これは誰かを助けることができるかもしれません、私の場合、問題は「Microsoft.VisualStudio.Web.CodeGeneration.Desig」でした、私はExcludeAssets = "all"を含むように ".csproj"ファイルのパッケージ参照を変更する必要がありました:

<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" ExcludeAssets="All" />
0