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

RyB*_*olt 6 msbuild msbuild-task

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

我有以下内容:

  <ItemGroup>
    <TestFiles Include="$(ProjectPath)\**\UnitTest.*.dll" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

"/testcontainer:UnitTest.SomeLibrary1.dll"
"/testcontainer:UnitTest.SomeLibrary2.dll"
"/testcontainer:UnitTest.SomeLibrary3.dll"
Run Code Online (Sandbox Code Playgroud)

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

TIA

Say*_*imi 6

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

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

要调用一次

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

要多次调用

<Message Text="Test Files: /testcontainer:%(TestFiles.RecursiveDir)%(TestFiles.Filename)%(TestFiles.Extension)"/>
Run Code Online (Sandbox Code Playgroud)

有关批处理的更多信息,请访问http://sedotech.com/Resources#batching