[asp.net-core] ASP.NET Core 웹 사이트에 Microsoft.CodeAnalysis가 게시 된 이유는 무엇입니까?

ASP.NET Core MVC 3.0 웹 사이트를 게시하고 있으며 출력 폴더에는 여러 언어로 된 Microsoft.CodeAnalysis라이브러리 에 대한 많은 참조가 포함되어 있습니다 . 누군가 이유를 알고 있습니까?

물론 FxCopAnalyzersNuget 패키지는 프로젝트에 설치되어 있지만 이전 버전의 프로젝트에서는 게시되지 않았으므로 프로덕션 환경이 아닌 데브 타임에서만 유용해야하기 때문에 지금 왜 그런지 이해할 수 없습니다.



답변

Microsoft에 대한 많은 언어 참조가 포함되어 있습니다.

3.0 버전을 사용할 때도 같은 문제가 발생했습니다. 그렇지만, 나 또한 거기에 있기 때문에이 출판물에 그물 코어 (3) 컴파일 전망에 의한 생각하지 않는 보기 ViewCompilation을release/2.1지점입니다.


프로덕션 환경이 아닌 데드 타임에만 유용해야합니다.

  1. 당신이 맞다고 생각합니다. 이러한 분석은 실시간으로 만 사용해야합니다.

  2. 그러나 SDK (3.0)를 수동으로 제거 하고 최신 SDK를 다시 설치하면 더 이상 재현 할 수 없습니다. 나는 왜 그런 일이 일어나지 않았는지, 아마도 지금 수정되었을 것입니다. 다른 이유로 발생할 가능성이 큽니다 . 우연히 Microsoft.CodeAnalysis의존하는 다른 패키지에 대한 추가 참조를 추가했습니다 . 어쨌든 먼저 SDK를 최신 버전으로 업그레이드하십시오.

  3. 또 다른 중요한 점은 Visual Studio를 사용하여 컨트롤러를 추가 할 때 Microsoft.VisualStudio.Web.CodeGeneration.Design자동으로 참조를 추가한다는 것 입니다. 이 패키지는 Microsoft.CodeAnalysis.Common패키지에 간접적으로 의존합니다 . 다음은 Microsoft.CodeAnalysis.CommonMicrosoft .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" />


답변