MS Build复制文件到输出目录时如何保留Translations文件夹结构?
问题原因
你当前的配置直接输出文件到bin根目录,是因为MSBuild默认会使用Content项相对于当前项目目录的相对路径作为输出路径,你引入的Translations目录位于项目上级目录,路径计算时丢失了Translations层级结构。
解决方案
方法1:通用方案(兼容所有类型的MSBuild项目)
手动指定Link属性映射输出路径:
<ItemGroup> <Content Include="$(ProjectDir)..\Translations\**\*.*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <Link>Translations\%(RecursiveDir)%(Filename)%(Extension)</Link> </Content> </ItemGroup>
参数说明:
%(RecursiveDir)是通配符**匹配到的子目录路径,配合前面的Translations\前缀,就能完整保留Translations根目录以及内部所有子目录的结构。
方法2:SDK风格项目简化方案(适用于.NET Core/.NET 5+等SDK格式的项目)
使用更简洁的LinkBase属性:
<ItemGroup> <Content Include="$(ProjectDir)..\Translations\**\*.*" LinkBase="Translations" CopyToOutputDirectory="PreserveNewest" /> </ItemGroup>
LinkBase会自动将指定目录作为所有匹配文件的输出根目录,无需手动拼接路径参数。
修改完成后重新生成项目,即可在输出目录下看到完整的Translations目录结构。
内容的提问来源于stack exchange,提问作者Ali EXE
相关产品推荐
相关产品推荐

