ASP.NET Core MVC 3.0 웹 사이트를 게시하고 있으며 출력 폴더에는 여러 언어로 된 Microsoft.CodeAnalysis
라이브러리 에 대한 많은 참조가 포함되어 있습니다 . 누군가 이유를 알고 있습니까?
물론 FxCopAnalyzers
Nuget 패키지는 프로젝트에 설치되어 있지만 이전 버전의 프로젝트에서는 게시되지 않았으므로 프로덕션 환경이 아닌 데브 타임에서만 유용해야하기 때문에 지금 왜 그런지 이해할 수 없습니다.
답변
Microsoft에 대한 많은 언어 참조가 포함되어 있습니다.
3.0 버전을 사용할 때도 같은 문제가 발생했습니다. 그렇지만, 나 또한 거기에 있기 때문에이 출판물에 그물 코어 (3) 컴파일 전망에 의한 생각하지 않는 보기 ViewCompilation을 에 release/2.1
지점입니다.
프로덕션 환경이 아닌 데드 타임에만 유용해야합니다.
-
당신이 맞다고 생각합니다. 이러한 분석은 실시간으로 만 사용해야합니다.
-
그러나 SDK (3.0)를 수동으로 제거 하고 최신 SDK를 다시 설치하면 더 이상 재현 할 수 없습니다. 나는 왜 그런 일이 일어나지 않았는지, 아마도 지금 수정되었을 것입니다. 다른 이유로 발생할 가능성이 큽니다 . 우연히 Microsoft.CodeAnalysis 에 의존하는 다른 패키지에 대한 추가 참조를 추가했습니다 . 어쨌든 먼저 SDK를 최신 버전으로 업그레이드하십시오.
-
또 다른 중요한 점은 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>
답변
솔루션을 더 쉽게 볼 수 있도록 노력하겠습니다.
문제는 아마도의 사용입니다 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" />