使用MSBuild复制带分隔符的文件列表



我有字符串值,在properygroup从config.xml文件中读取,输出为"c:testfile1;c:test2file2"我需要使用MSBuild将该列表复制到目标文件夹,我该如何实现?

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

上面的代码@filesToCopy包含逗号分隔的文件列表

您不应该关心分号作为分隔符。在这种情况下,MSBuild的复制任务正常工作。

它显示在MSDN文档示例中:

<ItemGroup>
    <MySourceFiles Include="a.cs;b.cs;c.cs"/>
</ItemGroup>
<Target Name="CopyFiles">
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="c:MyProjectDestination"
    />
</Target>

来自MSDN复制任务的解释

如果是关于转义分号的,则需要使用%3b进行转义,更多信息请参阅此处

如果您需要完整的信息,这里是

<ItemGroup>
      <Compile Include="c:\test\file1.txt%3Bc:\test2\file2.txt" /> 
   </ItemGroup>
<Copy SourceFiles="@(Compile)" DestinationFolder="c:destination%(RecursiveDir)">
</Copy>

filesToCopy视为属性,而不是ItemGroup:

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

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

msbuild CopyFiles.proj /t:CopyFiles /p:filesToCopy="c:testfile1;c:test2file2"

或使用MSBuild任务:

<Target Name="CallCopyFiles">
    <MSBuild Projects="CopyFiles.proj" Properties="filesToCopy=c:testfile1;c:test2file2"/>
</Target>

最新更新