在我的一个项目中,我正在使用名为Humanizer的强大库。这个库有很多语言版本(我算了38)。
当我构建我的项目时,我会看到所有这些文件夹,如“af”,“ar”,“bg”,“bn-BD”,...,“zh-Hant”,其中包含包含本地化资源的程序集这个图书馆。
我的问题是我的项目仅限英语,我没有兴趣在构建输出中包含所有这些本地化程序集。是否有一些从构建中省略它们的好方法?
我正在寻找这个问题的一般解决方案。它发生在除Humanizer之外的库,如DevExpress Controls等,它们不是开源的。
答案 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>