如何阻止本地化的 Microsoft.CodeAnalysis.*.resources.dll 文件被 ASP.NET Core 发布?

Ton*_*ich 25 asp.net-core visual-studio-2019 asp.net-core-3.0

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

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

在此处输入图片说明

在此处输入图片说明

nhu*_*uvy 15

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

<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.0.0" ExcludeAssets="All" />
Run Code Online (Sandbox Code Playgroud)

例如,旧*.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>
Run Code Online (Sandbox Code Playgroud)

新文件*.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>
Run Code Online (Sandbox Code Playgroud)

  • 您好,我的应用程序使用 asp net core 3,我添加了 * .csproj ExcludeAssets = "All",但这不起作用。还有其他想法吗?) (7认同)
  • 我遇到同样的问题。我什至尝试完全删除 Microsoft.VisualStudio.Web.CodeGeneration.Design 引用。我的部署文件夹中仍然有这些垃圾。删除 bin 文件夹 ext。没有帮助。你还有其他想法吗? (3认同)

Lea*_*dro 14

添加这个:

<SatelliteResourceLanguages>es</SatelliteResourceLanguages>
Run Code Online (Sandbox Code Playgroud)

到 .csproj:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <SatelliteResourceLanguages>es</SatelliteResourceLanguages>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

<SatelliteResourceLanguages>en;es</SatelliteResourceLanguages>
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,您可以使用“无”来排除所有这些。 (2认同)

小智 11

就我而言,这些本地化文件夹的来源来自 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> 
Run Code Online (Sandbox Code Playgroud)

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

#if DEBUG
            services.AddRazorPages().AddRazorRuntimeCompilation();
#else
            services.AddRazorPages();
#endif
Run Code Online (Sandbox Code Playgroud)

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

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