2010-03-08 2 views
4

J'ai un groupe de propriété, comme ceci:Puis-je lot basé sur une propriété (pas seulement des articles)?

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

Et je veux lot dans une tâche Exec, comme ceci:

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

Mais bien sûr, comme il est écrit que j'obtiens une erreur:

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

Can I tâches de traitement par lots sur les propriétés qui sont des listes? Je suppose que je pourrais le pirater en créant un ItemGroup d'espace réservé avec des métadonnées et un lot sur cela.

Répondre

13

Étant donné que votre propriété est séparée par un ;, vous pouvez directement créer un élément à partir de celui-ci, puis le traiter par lots. Par exemple.

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

Ici, je suis Batching en utilisant %(_PlatformItem.Identity) parce que l'identité a les valeurs (Win32 et 64 bits).

+1

+1 pour l'astuce .Identity. La syntaxe%() est impossible à google pour. – marklam

+0

Honte le message d'erreur est BS comme d'habitude. – Mrchief

Questions connexes