Using MSBuild, how to construct a dynamic string f

2020-07-11 07:02发布

I need to create multiple /testcontainer: parameters to feed into a task that exec's MsTest.

I have the following :

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

for each match in TestFiles I would like to build a string like so:

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

I am trying to use the internals of MSBuild without having to create a custom task, is this possible ?

TIA

2条回答
一夜七次
2楼-- · 2020-07-11 07:42

It really depends on the usage of this afterwards. For example the task that you are sending it to, does it accept in an item list and do you want to invoke it once or multiple times?

If you want to invoke it once then you use the @(...) syntax, and if you want to invoke it many times then you do batching with the %(...) syntax.

To invoke once

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

To invoke many times

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

More info on batching at http://sedotech.com/Resources#batching

查看更多
做个烂人
3楼-- · 2020-07-11 08:04

Try this:?

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

References:

查看更多
登录 后发表回答