我有字符串值,在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>