CreateItem et CreateProperty sont obsolètes dans MSBuild 3.5 (bien qu'ils continuent à fonctionner, bien sûr). Il était assez évident que nous avions besoin de la même syntaxe familière pour ItemGroup et PropertyGroup pour travailler à l'intérieur des cibles.
Mais ItemGroup à l'intérieur d'une cible a des pouvoirs supplémentaires spéciaux. Il peut modifier les éléments: par exemple, cela ajoutera true à tous les éléments de la liste des ressources qui ont une métadonnée nommée Primary avec la valeur true; seulement s'il n'y en a pas déjà Copie des métadonnées:
<ItemGroup>
<Resources Condition=" '%(Primary)' == 'true' ">
<Copy Condition=" '%(Copy)' == '' ">true</Copy>
</Resources>
</ItemGroup>
Une autre puissance magique: vous pouvez maintenant retirer des éléments d'une liste.Cet exemple supprime tous les éléments de la liste des ressources qui ont des métadonnées de type avec la valeur Bitmap:
<ItemGroup>
<Resources Condition=" '%(Type)'=='Bitmap' " Remove="@(Resources)"/>
</ItemGroup>
Ces pouvoirs magiques ne fonctionnent que dans à l'heure actuelle, pas à l'extérieur.
Pour plus de détails sur ce sujet, je recommande fortement le livre de Sayed Hashimi sur MSBuild. Il est facilement trouvé sur Amazon.
Dan - équipe msbuild.
Merci beaucoup, c'est exactement ce que je voulais savoir! Je vais devoir vérifier ce livre. – Jake
Ouais ce livre est super, j'adore :) :) :) Merci pour la rec. –
J'ai cependant trouvé une grande différence: CreateItem développe les caractères génériques qui lui sont donnés dans Include via une opération de transformation comme alors qu'une déclaration ItemGroup ne l'étend pas . –