C# 从生成输出中忽略程序集的本地化版本

C# 从生成输出中忽略程序集的本地化版本,c#,.net,build,localization,.net-assembly,C#,.net,Build,Localization,.net Assembly,在我的一个项目中,我使用了一个很棒的库,名为。这个库有许多语言变体(我数了38个) 当我构建我的项目时,我会看到所有这些文件夹,比如“af”、“ar”、“bg”、“bn-BD”、“zh-Hant”,其中包含该库的本地化资源的程序集 我的问题是,我的项目只使用英语,我对在生成输出中包含所有这些本地化程序集不感兴趣。有什么好方法可以从构建中省略它们吗 我正在寻找这个问题的一般解决办法。这种情况发生在非Humanizer的库中,如DevExpress控件等,它们不是开源的。您可以做的是向msbuild

在我的一个项目中,我使用了一个很棒的库,名为。这个库有许多语言变体(我数了38个)

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

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


我正在寻找这个问题的一般解决办法。这种情况发生在非Humanizer的库中,如DevExpress控件等,它们不是开源的。

您可以做的是向msbuild.csproj项目文件中添加一个目标(在这里,我将其命名为“RemoveSatelliteSassemblies”),例如,在末尾:

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

....

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

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

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

恩美

谢谢。很好用。这对我也很有效。我们在一些项目中包括SSRS报告查看器,其中有许多我们不需要的附属程序集。Humanizer 2.0现在允许您选择所需的本地化软件包。如果你只需要英语,那么你可以安装Humanizer.Core软件包。你可以在这里阅读更多关于这方面的内容-