【问题标题】:How to stop the localized Microsoft.CodeAnalysis.*.resources.dll files from getting published by ASP.NET Core?如何阻止本地化的 Microsoft.CodeAnalysis.*.resources.dll 文件被 ASP.NET Core 发布?
【发布时间】:2020-02-28 07:19:20
【问题描述】:

当我发布 ASP.NET Core 3.0 项目时,我得到了一些本地化文件夹,其中显示的 4 个程序集位于每个文件夹中。我不确定为什么要包含这些文件夹和文件。我的包都没有引用CodeAnalysis 包。

我在 csproj 文件中添加了<PreserveCompilationContext>false</PreserveCompilationContext>,但没有帮助。有没有办法排除它们?

【问题讨论】:

标签: asp.net-core visual-studio-2019 asp.net-core-3.0


【解决方案1】:

添加这个:

<SatelliteResourceLanguages>en</SatelliteResourceLanguages>

.csproj 文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
  </PropertyGroup>

按照建议,您可以使用none 排除所有这些:

<SatelliteResourceLanguages>none</SatelliteResourceLanguages>

并考虑您想要的语言,例如英语和西班牙语:

<SatelliteResourceLanguages>en;es</SatelliteResourceLanguages>

适用于VS2019及其他版本

【讨论】:

  • 这对我有用,您可以使用“none”来排除所有这些。
【解决方案2】:

如果您有一个对Microsoft.VisualStudio.Web.CodeGeneration.Design 的项目引用,那么您会在发布的输出中获得很多包含CodeAnalysis.dll 文件的语言文件夹,这是脚手架控制器所必需的。如果您的项目是这样,请将您的 .csproj 文件中的包引用更改为包含 ExcludeAssets="all"

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

例如,旧的*.csproj 文件

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UserSecretsId>aspnet-foo-4E53EF45-B3BE-4943-81BE-2449DC5AA2BC</UserSecretsId>
    <BlazorLinkOnBuild>false</BlazorLinkOnBuild>
  </PropertyGroup>
  
  <ItemGroup>
    <!-- ... -->
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design"
                      Version="3.0.0" />
  </ItemGroup>
  
  <ItemGroup>
    <!-- ... -->
  </ItemGroup>
</Project>

新文件*.csproj应该是

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UserSecretsId>aspnet-foo-4E53EF45-B3BE-4943-81BE-2449DC5AA2BC</UserSecretsId>
    <BlazorLinkOnBuild>false</BlazorLinkOnBuild>
  </PropertyGroup>
  
  <ItemGroup>
    <!-- ... -->
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design"
                      Version="3.0.0"
                      ExcludeAssets="All" />
  </ItemGroup>
  
  <ItemGroup>
    <!-- ... -->
  </ItemGroup>
</Project>

【讨论】:

  • 您好,我的应用程序使用 asp net core 3 并且我添加了 * .csproj ExcludeAssets = "All",但这不起作用。还有其他想法吗?)
  • @al.koval 清理并构建,或使用您的版本删除 bin 文件夹,重新构建。
  • 我遇到了同样的问题。我什至试图完全删除 Microsoft.VisualStudio.Web.CodeGeneration.Design 参考。我的部署文件夹中仍然有这个垃圾。删除 bin 文件夹 exct。没有帮助。你还有什么想法吗?
  • 核心 3.1 也有同样的问题,在这里尝试了所有解决方案,但仍然卡在这些文件夹中。
  • @CarlVerret 请检查我的答案,适用于 ASP .NET Core 3.1
【解决方案3】:

在我的例子中,这些本地化文件夹的来源来自包 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。它依赖于 Microsoft.CodeAnalysis.Razor。您可以在此处阅读有关该软件包用途的更多信息:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1

在尝试利用软件包时,您不能只排除资产。我的解决方法是在项目处于调试模式时有条件地包含包引用。

  <ItemGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.1" />
  </ItemGroup> 

然后我使用#if 预处理器指令有条件地运行启用razor 运行时编译的代码。

#if DEBUG
            services.AddRazorPages().AddRazorRuntimeCompilation();
#else
            services.AddRazorPages();
#endif

请注意:您可能需要删除 bin 文件夹才能看到构建后删除的文件夹。此外,请确保您在正确的解决方案配置下进行构建。

我能够找到描述这个确切场景的 Github 问题,但不幸的是它从未得到解决。 https://github.com/dotnet/extensions/issues/2247

【讨论】:

  • 在 VS2019 中无法使用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 和 services.AddControllersWithViews().AddRazorRuntimeCompilation();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2010-12-27
  • 1970-01-01
  • 2011-03-29
相关资源
最近更新 更多