You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSBuild:指定文件路径时CopyToOutputDirectory复制文件夹,是否为Bug?如何实现需求?

问题解答

这不是MSBuild的Bug,而是Content项的默认行为——它会保留文件相对于项目文件的目录结构,所以复制时会连同父文件夹一起输出到目标目录。

要实现仅复制文件到输出文件夹根目录的需求,可以用以下几种方法:

方法1:使用Link元数据

通过Link指定文件在输出目录中的路径,直接指向根目录的文件名,就能跳过父文件夹结构:

<ItemGroup>
    <Content Include="MyFolder\my_lib.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <Link>my_lib.dll</Link>
    </Content>
</ItemGroup>

方法2:使用Copy任务

如果需要更灵活的控制,直接用Copy任务在构建后执行复制操作,明确指定源和目标路径:

<Target Name="CopyMyLibToOutput" AfterTargets="Build">
    <Copy 
        SourceFiles="MyFolder\my_lib.dll" 
        DestinationFiles="$(OutputPath)\my_lib.dll" 
        SkipUnchangedFiles="true"
    />
</Target>

SkipUnchangedFiles="true"可以避免每次构建都重复复制未修改的文件,提升效率。

方法3:批量文件使用Flatten元数据

如果要复制多个文件且都要去掉目录结构,可以用Flatten元数据:

<ItemGroup>
    <Content Include="MyFolder\*.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <Flatten>true</Flatten>
    </Content>
</ItemGroup>

内容的提问来源于stack exchange,提问作者SimonOR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 04:42:37