为什么 Microsoft.CodeAnalysis 与 ASP.NET 核心网站一起发布?
Why is Microsoft.CodeAnalysis published with ASP.NET Core website?
我正在发布一个 ASP.NET Core MVC 3.0 网站,输出文件夹包含许多对 Microsoft.CodeAnalysis
库的多种语言的引用,有人知道为什么吗?
项目中当然安装了FxCopAnalyzers
Nuget包,但在项目的早期版本中并没有发布,所以我不明白为什么现在是,因为它应该只是有用的在开发时而不是在生产环境中。
contains lots of reference in many language to Microsoft.CodeAnalysis librairies
我在使用3.0版本的时候确实遇到了同样的问题。但我不认为这是由 .net core 3 对发布的编译视图造成的,因为 release/2.1
分支中也有 View ViewCompilation .
it should be useful only at dev time not in a production environnement.
我相信你是对的。这些分析应仅在开发时使用。
但是当我手动卸载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/
├───lib/
│ └───netstandard2.0/
│ ├─── ...
│ ├─── Microsoft.CodeAnalysis.dll
│ ├─── Microsoft.CodeAnalysis.pdb
│ ├─── Microsoft.CodeAnalysis.xml
│ └─── ...
├───package/
│ └───...
└───_rels/
这个包只在开发时需要。如果不删除此依赖项,您将在发布文件夹中获得大量与 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
相关的dlls:
以下是我试图使解决方案更容易理解的看法。
问题很可能是使用 AddRazorRuntimeCompilation()
。更具体地说,在 startup.cs 中,您可能会像这样添加 razor 运行时编译:
IMvcBuilder builder = services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
为了支持这一点,您的 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>
然后在 startup.cs 文件中,有条件地调用 AddRazorRuntimeCompilation()
,如下所示:
IMvcBuilder builder = services.AddControllersWithViews();
#if DEBUG
if (Env.IsDevelopment()) {
builder.AddRazorRuntimeCompilation();
}
#endif
这将导致所有这些 Microsoft.CodeAnalysis
库仅在调试模式下编译时出现。所以现在,当您使用 Release 模式发布时,它们将不会成为输出的一部分。
对我来说,*.csproj
文件中的这一行以某种方式解决了这个问题。它仍然部署 Microsoft.CodeAnalysis
,但仅针对 en
:
<PropertyGroup>
<!-- ... -->
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
请参阅 the comment(作者:Jonathon Marolf)关于 Github 的问题。
在我的例子中,问题是“Microsoft.VisualStudio.Web.CodeGeneration.Design”。我需要更改“.csproj”文件中的包引用以包含 ExcludeAssets="all"
:
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" ExcludeAssets="All" />
我没有使用 Razor Compilation,但仍然遇到同样的问题。我结合了这里的答案来解决它。对于csproj
,我首先添加了这个:
<PropertyGroup>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
并将实际项目更改为:
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.4"
Condition="'$(Configuration)' == 'Debug'" />
我正在发布一个 ASP.NET Core MVC 3.0 网站,输出文件夹包含许多对 Microsoft.CodeAnalysis
库的多种语言的引用,有人知道为什么吗?
项目中当然安装了FxCopAnalyzers
Nuget包,但在项目的早期版本中并没有发布,所以我不明白为什么现在是,因为它应该只是有用的在开发时而不是在生产环境中。
contains lots of reference in many language to Microsoft.CodeAnalysis librairies
我在使用3.0版本的时候确实遇到了同样的问题。但我不认为这是由 .net core 3 对发布的编译视图造成的,因为 release/2.1
分支中也有 View ViewCompilation .
it should be useful only at dev time not in a production environnement.
我相信你是对的。这些分析应仅在开发时使用。
但是当我手动卸载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/ ├───lib/ │ └───netstandard2.0/ │ ├─── ... │ ├─── Microsoft.CodeAnalysis.dll │ ├─── Microsoft.CodeAnalysis.pdb │ ├─── Microsoft.CodeAnalysis.xml │ └─── ... ├───package/ │ └───... └───_rels/
这个包只在开发时需要。如果不删除此依赖项,您将在发布文件夹中获得大量与
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
相关的dlls:
以下是我试图使解决方案更容易理解的看法。
问题很可能是使用 AddRazorRuntimeCompilation()
。更具体地说,在 startup.cs 中,您可能会像这样添加 razor 运行时编译:
IMvcBuilder builder = services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
为了支持这一点,您的 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>
然后在 startup.cs 文件中,有条件地调用 AddRazorRuntimeCompilation()
,如下所示:
IMvcBuilder builder = services.AddControllersWithViews();
#if DEBUG
if (Env.IsDevelopment()) {
builder.AddRazorRuntimeCompilation();
}
#endif
这将导致所有这些 Microsoft.CodeAnalysis
库仅在调试模式下编译时出现。所以现在,当您使用 Release 模式发布时,它们将不会成为输出的一部分。
对我来说,*.csproj
文件中的这一行以某种方式解决了这个问题。它仍然部署 Microsoft.CodeAnalysis
,但仅针对 en
:
<PropertyGroup>
<!-- ... -->
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
请参阅 the comment(作者:Jonathon Marolf)关于 Github 的问题。
在我的例子中,问题是“Microsoft.VisualStudio.Web.CodeGeneration.Design”。我需要更改“.csproj”文件中的包引用以包含 ExcludeAssets="all"
:
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" ExcludeAssets="All" />
我没有使用 Razor Compilation,但仍然遇到同样的问题。我结合了这里的答案来解决它。对于csproj
,我首先添加了这个:
<PropertyGroup>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
并将实际项目更改为:
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.4"
Condition="'$(Configuration)' == 'Debug'" />