.net 从生成输出中省略程序集的本地化版本

ncecgwcz  于 2022-12-24  发布在  .NET
关注(0)|答案(2)|浏览(116)

在我的一个项目中,我使用了一个很棒的库Humanizer,这个库有很多语言变体(我数了38种)。
当我构建我的项目时,我会看到所有这些文件夹,如“af”、“ar”、“bg”、“bn-BD”、......、“zh-Hant”,其中的程序集包含了这个库的本地化资源。
我的问题是我的项目是纯英语的,我对在我的构建输出中包含所有这些本地化的程序集不感兴趣。有什么好的方法可以从构建中省略它们吗?
我正在寻找这个问题的通用解决方案。它发生在库以外的人性化,如DevExpress控件等,这是不是开源。

q0qdq0h2

q0qdq0h21#

您可以做的是向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文件中声明)。

y1aodyip

y1aodyip2#

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

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

请参见dotnet/sdk/issues/774

相关问题