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

Tom*_*rek 16 .net c# localization build .net-assembly

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

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

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

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

Sim*_*ier 26

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

<Project...>
  ....
  <Target Name="RemoveSatelliteAssemblies" AfterTargets="ResolveAssemblyReferences">
    <ItemGroup>
        <ReferenceCopyLocalPaths Remove="@(ReferenceSatellitePaths)" />
    </ItemGroup>
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你。完美运行。 (2认同)

tha*_*alm 17

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

<PropertyGroup>
  <SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

请参阅dotnet/sdk/issues/774