从构建输出

时间:2015-05-15 14:51:56

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

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

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

我的问题是我的项目仅限英语,我没有兴趣在构建输出中包含所有这些本地化程序集。是否有一些从构建中省略它们的好方法?

我正在寻找这个问题的一般解决方案。它发生在除Humanizer之外的库,如DevExpress Controls等,它们不是开源的。

2 个答案:

答案 0 :(得分:24)

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

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

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

答案 1 :(得分:3)

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

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

请参见dotnet/sdk/issues/774