【问题标题】:Omit localized versions of assemblies from the build output从构建输出中省略程序集的本地化版本
【发布时间】:2015-07-27 13:27:07
【问题描述】:

在我的一个项目中,我使用了一个很棒的库,名为 Humanizer。这个库有多种语言版本(我数了 38 种)。

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

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

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

【问题讨论】:

标签: c# .net build localization .net-assembly


【解决方案1】:

您可以做的是在 msbuild .csproj 项目文件中添加一个目标(在这里,我将其命名为“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 文件中声明)。

【讨论】:

  • 谢谢。完美运行。
  • 这也适用于我。我们在一些项目中包含了 SSRS 报告查看器,其中包含许多我们不需要的附属程序集。
  • 请注意,这会删除 所有 本地化文件,即使是那些从您的其他项目中引用的文件
【解决方案2】:

使用最新的 msbuild,您可以简单地将其放入您的 .csproj 文件中:

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

dotnet/sdk/issues/774

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多