views:

95

answers:

2

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

+1  A: 

Try this:?

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

References:

Cheeso
+1  A: 

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

Sayed Ibrahim Hashimi
I wanted to build params for mstest: i.e. <Exec Command="MsTest.exe $(TestFiles) > . You can have multiple /testcontainer params and I need to build them dynamically, does that help?
RyBolt
If you want to execute MSTest cases then you should look at my blog entry http://sedodream.com/2009/08/13/MSBuildExecutingMSTestUnitTests.aspx.
Sayed Ibrahim Hashimi