2010-03-08 61 views
4

我有一个属性组,就像这样:我可以批量基于属性(不只是项目)吗?

<PropertyGroup> 
    <Platform>Win32;x64</Platform> 
</PropertyGroup> 

我想批量在Exec的任务,像这样:

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

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

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

我可以对列表属性进行批处理吗?我想我可以通过创建一个带有元数据和批处理的占位符ItemGroup来破解它。

回答

13

由于您的财产被;分开,您可以直接从中创建一个项目,然后从该项目进行批处理。例如。

<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> 

这里我使用%(_PlatformItem.Identity)因为身份具有价值(Win32和x64)的配料。

+1

对于.Identity小费。 %()语法对谷歌来说是不可能的。 – marklam 2010-03-18 15:59:08

+0

错误消息是BS照常。 – Mrchief 2012-08-23 15:07:39

相关问题