C#项目复制指定文件或目录到输出目录

编辑项目 *.csproj 文件:

<!-- 复制文件任务 CopyTestFiles,在 Build 阶段前 -->
<Target Name="CopyTestFiles" BeforeTargets="Build">
    <PropertyGroup>
        <!-- 目标路径 -->
        <TargetFolder>$(OutputPath)HTRI\Case\10086\</TargetFolder>
        <!-- 源文件路径 -->
        <!-- 这里的 SourceFolder 路径最后不要加反斜杠 -->
        <SourceFolder>TestFiles\HTRI</SourceFolder>
    </PropertyGroup>
    <ItemGroup>
        <!-- 确保这里包含的是文件,或者说,Copy 任务会处理其中的文件部分 -->
        <!-- 建议加上 *.* 明确指代文件,或者 **\* 也行,Copy 任务会选择文件 -->
        <TestFiles Include="$(SourceFolder)\**\*.*"/>
    </ItemGroup>
    <!-- 检查并创建目录 -->
    <Message Text="创建目录: $(TargetFolder)" Importance="high"/>
    <MakeDir Directories="$(TargetFolder)" Condition="!Exists('$(TargetFolder)')"/>
    <!-- 检查源文件目录是否存在并复制到目标目录 -->
    <Message Text="复制文件从 $(SourceFolder) 到 $(TargetFolder)" Importance="high"/>
    <!-- 复制并保留目录结构 -->
    <Copy SourceFiles="@(TestFiles)"
          DestinationFiles="@(TestFiles->'$(TargetFolder)%(RecursiveDir)%(Filename)%(Extension)')"
          SkipUnchangedFiles="true"
          Condition="Exists('$(SourceFolder)')"/>
    <!-- 添加调试信息 -->
    <Message Text="源文件夹 $(SourceFolder) 不存在,跳过复制"
             Condition="!Exists('$(SourceFolder)')"
             Importance="high"/>
</Target>

作用就是把当前项目根目录下的 TestFiles\HTRI 目录中的所有文件,都在构建项目的时候拷贝到输出根目录下的 HTRI\Case\10086\ 中。

实测: