2017-09-14 2 views
0

Kann eine dynamische Eigenschaftsgruppe an eine MSbuild-Aufgabe übergeben werden? Also, wenn ich die folgenden Eigenschaften und Werte haben:Wie übergebe ich dynamische Eigenschaften an eine MSbuild-Aufgabe?

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

Aber es wäre das gleiche wie der Aufruf der Aufgabe wie folgt:

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

ich MSBuild mit einer kurzen Eigenschaftsliste nennen könnte

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

Dies ist hilfreich, wenn es eine große Property-Liste gibt und nur ein Platz benötigt wird.

Antwort

1

Es gibt zwei Probleme hier:

  • Eigenschaften sind nicht gruppieren, jedes <PropertyGroup> Element wird nur verwendet, um Eigenschaften zu definieren. Nach der Auswertung sind alle Eigenschaften nur eine Liste von Schlüssel-Wert-Paaren ohne irgendeine Gruppierung, so dass selbst ein <PropertyGroup Label="my groups"> keine Auswirkung auf die Eigenschaften hat, die es enthält.
  • Elemente können verwendet werden, um dem gleichen "Schlüssel" (Elementidentität) weitere Metadatenwerte hinzuzufügen. Das Iterieren über benutzerdefinierte Metadaten kann jedoch nur in Msbuild-Tasks (=> code) und nicht direkt in MSBuild ausgeführt werden, was benutzerdefinierte Tasks und Build-Logik erfordert (siehe this question).

Die praktischste Lösung für Ihr Problem ist es, eine einzelne Eigenschaft zu definieren, die alle Werte enthält:

<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

Genau das, was ich suchte, danke! – nichos

Verwandte Themen