从构建输出中省略程序集的本地化版本

Omit localized versions of assemblies from the build output

在我的一个项目中,我使用了一个很棒的库,叫做 Humanizer。这个库有多种语言变体(我数了数 38)。

当我构建我的项目时,我会看到所有这些文件夹,例如 "af"、"ar"、"bg"、"bn-BD"、...、"zh-Hant" 程序集包含此库的本地化资源。

我的问题是我的项目只有英文版,我不想在我的构建输出中包含所有这些本地化程序集。有什么好的方法可以从构建中省略它们吗?

我正在寻找这个问题的通用解决方案。它发生在 Humanizer 以外的库中,例如 DevExpress Controls 等,它们不是开源的。

你可以做的是在msbuild .csproj项目文件中添加一个target(这里,我命名为'RemoveSatelliteAssemblies'),例如在最后:

<Project...>
  ....
  <Target Name="RemoveSatelliteAssemblies" AfterTargets="ResolveAssemblyReferences">
    <ItemGroup>
        <ReferenceCopyLocalPaths Remove="@(ReferenceSatellitePaths)" />
    </ItemGroup>
  </Target>
</Project>

此目标将 运行 位于标准 ResolveAssemblyReferences 目标之后(在 C:\Program Files (x86)\MSBuild 目录或 C:\Windows\Microsoft.Net 目录中的 Microsoft.Common[something].targets 文件中某处定义- 这取决于您的 Visual Studio / MsBuild 设置和版本),并且它将从标记为复制本地的引用路径列表中删除所有引用卫星路径(两个 ItemGroup 名称也在标准 .targets 文件中声明)。

使用最新的 msbuild,您只需将其放入 .csproj 文件即可:

<PropertyGroup>
  <SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>

dotnet/sdk/issues/774