Jon*_*han 18 fxcop asp.net-core microsoft.codeanalysis
我正在发布一个 ASP.NET Core MVC 3.0 网站,输出文件夹包含许多语言的库引用Microsoft.CodeAnalysis,有人知道为什么吗?
当然FxCopAnalyzers,项目中安装了Nuget 包,但它没有在项目的早期版本中发布,所以我不明白为什么现在它应该只在开发时有用,而不是在生产环境中使用。
mrm*_*wji 22
对我来说,*.csproj文件中的这一行以某种方式解决了这个问题。它仍然部署Microsoft.CodeAnalysis, 但仅用于en:
<PropertyGroup>
<!-- ... -->
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
请参阅关于 Github 问题的评论(由 Jonathon Marolf)。
Ron*_*n C 13
这是我试图使解决方案更容易看到的看法。
问题很可能是使用AddRazorRuntimeCompilation(). 更具体地说,在 startup.cs 中,您可能会像这样添加 razor 运行时编译:
IMvcBuilder builder = services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
Run Code Online (Sandbox Code Playgroud)
为了支持这一点,您的 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>
Run Code Online (Sandbox Code Playgroud)
然后在 startup.cs 文件中,AddRazorRuntimeCompilation()像这样有条件地调用:
IMvcBuilder builder = services.AddControllersWithViews();
#if DEBUG
if (Env.IsDevelopment()) {
builder.AddRazorRuntimeCompilation();
}
#endif
Run Code Online (Sandbox Code Playgroud)
这将导致所有这些Microsoft.CodeAnalysis库仅在调试模式下编译时才会出现。所以现在,当您使用发布模式发布时,它们将不会成为输出的一部分。
就我而言,问题是“Microsoft.VisualStudio.Web.CodeGeneration.Design”。我需要更改“.csproj”文件中的包引用以包括ExcludeAssets="all":
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" ExcludeAssets="All" />
Run Code Online (Sandbox Code Playgroud)
包含对 Microsoft.CodeAnalysis 库的多种语言的大量参考
我在使用 3.0 版本时确实遇到了同样的问题。但我不认为这是由 .net core 3 编译发布视图引起的,因为release/2.1分支中还有View ViewCompilation。
它应该只在开发时有用,而不是在生产环境中使用。
我相信你是对的。这些分析只能在开发时使用。
但是当我手动卸载SDK(3.0) 并再次安装最新的 SDK 时,我无法再重现。我不知道为什么会发生,也许现在已经修复了。这更有可能是由另一个原因引起的:我在其他依赖于 Microsoft.CodeAnalysis的包上意外添加了额外的参考)。无论如何,请先将您的 SDK 升级到最新版本。
另一个重要的是,当使用 Visual Studio 添加控制器时,它会Microsoft.VisualStudio.Web.CodeGeneration.Design自动添加一个引用。请注意,此Microsoft.CodeAnalysis.Common包间接依赖于包。这Microsoft.CodeAnalysis.Common是 Microsoft .NET 编译器平台(“Roslyn”)使用的共享包。如果你下载这个包并手动解压这个库,你会发现有一个Microsoft.CodeAnalysis.dll:
microsoft.codeanalysis.common.3.3.1/ ????库/ ? ????netstandard2.0/ ? ???... ? ???微软代码分析文件 ? ???Microsoft.CodeAnalysis.pdb ? ???微软代码分析.xml ? ???... ????包裹/ ? ????... ????_rels/
这个包只在开发时需要。如果你不删除这个依赖,你会Microsoft.CodeAnalysis在你的发布文件夹中得到很多相关的 dll 。
microsoft.codeanalysis.common.3.3.1/ ????lib/ ? ????netstandard2.0/ ? ???? ... ? ???? Microsoft.CodeAnalysis.dll ? ???? Microsoft.CodeAnalysis.pdb ? ???? Microsoft.CodeAnalysis.xml ? ???? ... ????package/ ? ????... ????_rels/
删除那些依赖于 的包,Microsoft.CodeAnalysis然后你应该不会得到Microsoft.CodeAnalysis相关的 dll:
| 归档时间: |
|
| 查看次数: |
5767 次 |
| 最近记录: |