我有字符串值,在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包括逗号分隔文件列表。
答案 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>