复制msbuild中的子文件夹和文件

时间:2014-08-20 20:37:54

标签: msbuild msbuild-4.0

我无法使用以下代码复制子文件夹和文件:

<ItemGroup>
<Compile Include="C:\Test\Folder1\text.txt"/>
<Compile Include="C:\Test\text1.txt"/>
</ItemGroup>
    <Copy SourceFiles="@(Compile)" DestinationFiles="@(Compile->'C:\Destination\%(RecursiveDir)%(Filename)%(Extension)')" />

我收到此错误:无法找到路径的一部分。

如何使用msbuild将C:\ Test \ files和子文件夹复制到C:\ Destination \?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

为了填充RecursiveDir metadata,您必须在项目的路径中指定递归通配符(双星号)。 **通配符将标记应该应用RecursiveDir的相对点。在您的示例中,听起来您希望在**之后添加C:\Test通配符,因此您的代码需要如下所示:

<ItemGroup>
    <Compile Include="C:\Test\**\Folder1\text.txt"/>
    <Compile Include="C:\Test\**\text1.txt"/>
</ItemGroup>
<Copy SourceFiles="@(Compile)" DestinationFiles="@(Compile->'C:\Destination\%(RecursiveDir)%(Filename)%(Extension)')" />

如上所示添加通配符会将文件复制到以下位置:

C:\Destination\text1.txt
C:\Destination\Folder1\text.txt

答案 1 :(得分:1)

与上面的回复相同,但没有额外的列表转换:

<ItemGroup>
    <Compile Include="C:\Test\**\Folder1\text.txt"/>
    <Compile Include="C:\Test\**\text1.txt"/>
</ItemGroup>
<Copy SourceFiles="@(Compile)" DestinationFolder="C:\Destination\%(RecursiveDir)" />