如何禁用.NET Core MSTest项目构建自动生成的语言文件夹
问题描述
使用Visual Studio 2019创建C# MSTest Test Project (.NET Core)项目时,每次执行项目构建操作,都会生成多个以双字母命名的语言文件夹,效果如下图所示:
每个语言文件夹中包含如下文件:
- Microsoft.TestPlatform.CommunicationUtilities.resources.dll
- Microsoft.TestPlatform.CoreUtilities.resources.dll
- Microsoft.TestPlatform.CrossPlatEngine.resources.dll
- Microsoft.VisualStudio.TestPlatform.Common.resources.dll
- Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll
这些文件和文件夹不属于项目必需内容,手动删除后下次构建会重新生成,可通过以下配置彻底关闭该自动生成行为。
解决方案
方案一:指定项目卫星资源语言(推荐)
该方法通过显式声明项目需要的本地化语言,阻止构建流程复制无关语言的资源文件夹,无额外性能开销:
- 右键解决方案资源管理器中的对应MSTest项目,选择「编辑项目文件」,打开
.csproj配置文件 - 在首个
<PropertyGroup>节点内添加如下配置:
<!-- 不需要多语言支持直接填en即可,不会生成多余的语言文件夹 --> <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
如果项目需要保留简体中文资源,将属性值改为zh-Hans即可,构建时仅会保留简体中文对应的资源文件夹,其他语言文件夹不会生成。
3. 保存配置后先执行「清理解决方案」,手动删除输出目录下已存在的残留语言文件夹,后续重新构建就不会再生成多余内容。
方案二:添加构建后自动清理规则(兼容旧版.NET Core SDK)
如果方案一在当前使用的SDK版本下不生效,可以添加构建目标,在每次构建完成后自动清理生成的无用语言文件夹:
- 打开项目的
.csproj文件 - 在末尾的
</Project>标签之前添加如下配置:
<Target Name="RemoveUselessLanguageFolders" AfterTargets="Build"> <ItemGroup> <!-- 匹配输出目录下双字母、区域代码格式的语言文件夹 --> <FoldersToDelete Include="$(OutputPath)\??\" /> <FoldersToDelete Include="$(OutputPath)\??-??\" /> </ItemGroup> <RemoveDir Directories="@(FoldersToDelete)" /> </Target>
- 保存配置后重新构建,多余的语言文件夹会在构建完成后被自动删除,无需手动操作。
内容的提问来源于stack exchange,提问作者AlainD
相关产品推荐
相关产品推荐

