2017-09-14 1 views
0

Est-il possible de passer un groupe de propriétés dynamiques à une tâche MSbuild? Donc, si j'ai les propriétés et les valeurs suivantes:Comment passer des propriétés dynamiques à une tâche MSbuild?

<MyPropertyGroup> 
    <Foo>bar</Foo> 
    <Foo1>bar1</Foo1> 
    <Foo2>bar2</Foo2> 
</MyPropertyGroup> 

je pourrais appeler MSBuild avec une liste de propriétés courte:

<MSBuild Projects="$(SolutionFile)" Targets="Build" Properties="MyPropertyGroup" /> 

Mais ce serait la même chose que d'appeler la tâche comme ceci:

<MSBuild Projects="$(SolutionFile)" Targets="Build" Properties="Foo=bar;Foo1=bar1;Foo2=bar2" /> 

Ceci est utile si la liste de propriétés est importante et que seule une place doit être conservée.

Répondre

1

Il y a deux questions:

  • propriétés ne sont pas regroupés, tout élément <PropertyGroup> est uniquement utilisé pour définir les propriétés. Après l'évaluation, toutes les propriétés sont juste une liste de paires clé-valeur sans aucun groupement, donc même un <PropertyGroup Label="my groups"> n'a aucun effet sur les propriétés qu'il contient.
  • Les éléments peuvent être utilisés pour ajouter plus de valeurs de métadonnées à la même "clé" (identité de l'élément). Cependant, l'itération sur les métadonnées personnalisées ne peut se faire que dans les tâches msbuild (=> code) et pas directement dans MSBuild, nécessitant des tâches personnalisées et une logique de construction (voir this question).

La solution la plus pratique à votre problème est de définir une propriété unique qui contient toutes les valeurs:

<PropertyGroup> 
    <BuildParameters> 
    Configuration=Debug; 
    Platform=Any CPU; 
    SomeOtherProperty=Foo 
    </BuildParameters> 
</PropertyGroup> 
… 
<PropertyGroup> 
    <!-- this property can even be extended afterwards, e.g. when a condition is needed --> 
    <BuildParameters Condition=" '$(ShallAppendThings)' == 'true' "> 
    $(BuildParameters); 
    AnotherProperty=SomeValue 
    </BuildParameters> 
</PropertyGroup> 
… 

<MSBuild Projects="$(SolutionFile)" Targets="Build" Properties="$(BuildProperties)" /> 
+0

Exactement ce que je cherchais, merci! – nichos