使用MSBuild,如何通过迭代ItemGroup中的文件来构造动态字符串?

时间:2010-05-04 20:04:25

标签: msbuild msbuild-task

我需要创建多个/ testcontainer:参数来提供给exec的MsTest的任务。

我有以下内容:

  <ItemGroup>
    <TestFiles Include="$(ProjectPath)\**\UnitTest.*.dll" />
  </ItemGroup>

对于 TestFiles 中的每个匹配我想构建一个这样的字符串:

"/testcontainer:UnitTest.SomeLibrary1.dll"
"/testcontainer:UnitTest.SomeLibrary2.dll"
"/testcontainer:UnitTest.SomeLibrary3.dll"

我试图使用MSBuild的内部而不必创建自定义任务,这可能吗?

TIA

2 个答案:

答案 0 :(得分:6)

这实际上取决于之后的用法。例如,您要发送给它的任务,是否在项目列表中接受并且您想要一次或多次调用它?

如果你想调用它一次,那么你使用@(...)语法,如果你想多次调用它,那么你用%(...)语法进行批处理。

要调用一次

<Message Text="Test Files: @(TestFiles->'/testcontainer:%(RecursiveDir)%(Filename)%(Extension)')"/>

多次调用

<Message Text="Test Files: /testcontainer:%(TestFiles.RecursiveDir)%(TestFiles.Filename)%(TestFiles.Extension)"/>

有关http://sedotech.com/Resources#batching

批处理的更多信息

答案 1 :(得分:2)

试试这个:?

<Message Text="TestFiles= @(TestFiles-> '&quot;%(Fullpath)&quot;', ' ')" />

参考文献: