如何将文件复制到C#项目输出目录($TargetDir)指定文件夹且不保留原路径
解决方案:将资源直接复制到Bin指定目录,不保留原路径
方案1:修改项目文件(.csproj)规则
手动编辑项目文件,用更高效的复制策略替代CopyAlways:
- 找到对应资源的
<ItemGroup>节点,把原本的配置:
<ItemGroup> <Content Include="Resources\Grafics\**\*"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>
- 修改为:
<ItemGroup> <Content Include="Resources\Grafics\**\*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <DestinationSubDirectory>Grafics\%(RecursiveDir)</DestinationSubDirectory> </Content> </ItemGroup>
PreserveNewest只会复制更新过的文件,比CopyAlways更高效;%(RecursiveDir)会保留Grafics目录下的子结构,不需要的话直接写<DestinationSubDirectory>Grafics</DestinationSubDirectory>即可。
方案2:Post-build事件自动复制
用系统命令在编译完成后复制文件,灵活度拉满:
- 打开项目属性 → 生成事件 → 编辑Post-build事件命令行
- 输入以下命令(路径宏会自动适配你的项目):
robocopy "$(ProjectDir)Resources\Grafics" "$(TargetDir)Grafics" /E /XO
- 参数说明:
$(ProjectDir)指向项目根目录,$(TargetDir)指向Bin输出目录/E复制所有子目录(含空目录),不需要可去掉/XO只复制比目标文件新的内容,避免重复复制
方案3:添加链接文件(适合少量资源)
如果资源文件不多,用链接方式绕过原路径:
- 右键项目 → 添加 → 现有项 → 定位到
Resources\Grafics下的文件 → 点击「添加」旁的下拉箭头,选「添加为链接」 - 选中这些链接文件,在属性面板设置:
- 复制到输出目录:如果较新则复制(对应
PreserveNewest,比Always高效) - 输出目录:
Grafics
- 复制到输出目录:如果较新则复制(对应
编译时文件会直接复制到Bin/Grafics目录,不会带上原路径层级。
内容的提问来源于stack exchange,提问作者Michael Mora
相关产品推荐
相关产品推荐

