我可以基于属性(不仅仅是项目)进行批处理吗?

Jos*_*del 4 msbuild

我有一个属性组,如下所示:

<PropertyGroup>
    <Platform>Win32;x64</Platform>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我想在Exec任务中批处理,如下所示:

<Exec Command='devenv MySolution.sln /Build "Release|%(Platform)"' />
Run Code Online (Sandbox Code Playgroud)

但是,当然,正如我写的那样我得到一个错误:

error MSB4095: The item metadata %(Platform) is being referenced without an item name.  Specify the item name by using %(itemname.Platform).
Run Code Online (Sandbox Code Playgroud)

我可以在列表属性上批处理任务吗?我想我可以通过创建一个包含元数据和批处理的占位符ItemGroup来破解它.

Say*_*imi 13

由于您的属性由a分隔,;您可以直接从中创建项目,然后从中批处理.例如.

<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>
Run Code Online (Sandbox Code Playgroud)

这里我正在批处理使用,%(_PlatformItem.Identity)因为Identity具有值(Win32和x64).