Can I batch based on a Property (not just Items)?

msbuild

Solution

Since your property is separated by a `;` you can directly create an item from it and then batch from that. For example.

<Project ToolsVersion="3.5" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Platform>Win32;x64</Platform>
  </PropertyGroup>

  <Target Name="Demo">
    <ItemGroup>
      <_PlatFormItem Include="$(Platform)"/>
    </ItemGroup>

    <Message Text="Platform: $(Platform)"/>
    <Message Text="_PlatFormItem: @(_PlatFormItem)"/>
    <Message Text="Platform.Identity: %(_PlatFormItem.Identity)"/>

    <Exec Command='devenv MySolution.sln /Build "Release|%(_PlatFormItem.Identity)"' />
  </Target>

</Project>

Here I'm batching using `%(_PlatformItem.Identity)` because Identity has the values (Win32 and x64).

Problem

I have a property group, like so: ``` <PropertyGroup> <Platform>Win32;x64</Platform> </PropertyGroup> ``` And I want to batch in an Exec task, like so: ``` <Exec Command='devenv MySolution.sln /Build "Release|%(Platform)"' /> ``` But of course, as written I get an error: ``` error MSB4095: The item metadata %(Platform) is being referenced without an item name. Specify the item name by using %(itemname.Platform). ``` Can I batch tasks on properties that are lists? I suppose I could hack it by creating a placeholder ItemGroup with metadata and batch on that.

Original source