使用MSBuild复制分隔文件列表

时间:2011-04-26 09:08:03

标签: .net asp.net msbuild

我有字符串值,在properygroup中从config.xml文件读取,输出为“c:\ test \ file1; c:\ test2 \ file2”我需要使用MSBuild将该列表复制到目标文件夹我该怎么办?那个?

<Target Name="CopyFiles">  
    <ItemGroup>
        <FilesToCopy 
            Include="@(filesToCopy)"                 
            Exclude="**\*trash*"/>
    </ItemGroup>
    <Copy SourceFiles="@(filesToCopy)"          
         DestinationFiles="@(filesToCopy->'$(Dest)\%(RecursiveDir)\%(Filename)%(Extension)')"          
         ContinueOnError="true"/></Target>

在上面的代码中@filesToCopy包括逗号分隔文件列表。

3 个答案:

答案 0 :(得分:1)

你不应该把分号当成分隔符。在这种情况下,MSBuild的复制任务正常工作。

它在MSDN文档示例中显示:

<ItemGroup>
    <MySourceFiles Include="a.cs;b.cs;c.cs"/>
</ItemGroup>

<Target Name="CopyFiles">
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="c:\MyProject\Destination"
    />
</Target>

来自MSDN复制任务的explanation

答案 1 :(得分:0)

如果它是关于转义分号,你需要使用%3b来逃避它,请参阅here以获取更多信息

如果您需要完整的信息,请点击此处

<ItemGroup>
      <Compile Include="c:\\test\\file1.txt%3Bc:\\test2\\file2.txt" /> 
   </ItemGroup>

<Copy SourceFiles="@(Compile)" DestinationFolder="c:\destination\%(RecursiveDir)">
</Copy>

答案 2 :(得分:0)

filesToCopy视为属性,而不是ItemGroup:

<FilesToCopy Include="$(filesToCopy)" Exclude="**\*trash*"/>

然后,当您调用CopyFiles目标时,使用分隔的文件列表填充filesToCopy

msbuild CopyFiles.proj /t:CopyFiles /p:filesToCopy="c:\test\file1;c:\test2\file2"

或使用MSBuild任务:

<Target Name="CallCopyFiles">
    <MSBuild Projects="CopyFiles.proj" Properties="filesToCopy=c:\test\file1;c:\test2\file2"/>
</Target>