2012-04-13 6 views
2

Unten ist ein Teil einer MSBuild-Datei, die ich arbeite:Warum werden in MSBuild keine Elementmetadaten innerhalb einer Eigenschaft aufgelöst?

<ItemGroup> 
    <Tests Include="$(SolutionDir)\**\bin\$(TestPlatform)\$(Configuration)\*.Tests.dll" /> 
</ItemGroup> 

<PropertyGroup> 
    <TestProperties>/testcontainer:%(Tests.FullPath)</TestProperties> 
</PropertyGroup> 

Ich möchte eine Eigenschaft haben, die einen Schalter Befehlszeile hält. Wenn ich jedoch versuche, $(TestProperties) in einem Exec Befehl Zeichenfolge zu verwenden, wird %(Tests.FullPath) nie in den absoluten Pfad des Elements Tests aufgelöst. Stattdessen wird es immer wörtlich verarbeitet, wie "%(Tests.FullPath)".

Mache ich etwas falsch oder ist dies ein Standard MSBuild Verhalten? Wenn letzteres, gibt es eine Möglichkeit für mich, um dieses Problem zu umgehen?

Danke

P.S. - Ich weiß, dass ich wahrscheinlich nicht auf die FullPath-Eigenschaft zugreifen muss, da mein Include-Wert ein absoluter Pfad ist. Trotzdem würde ich gerne das Problem verstehen und wissen, wie ich damit umgehen soll.

Antwort

7

Sie haben einen Syntaxfehler. Artikellisten werden über das @ -Zeichen referenziert und Artikel-Metadaten werden über% referenziert. Einzelheiten finden Sie unter MSBuild Special Character Reference. Um auf die bekannten Item-Metadaten zuzugreifen, müssen Sie eine Transformation innerhalb der Property selbst anwenden.

<ItemGroup> 
    <Tests Include="MyFile.txt" /> 
</ItemGroup> 

<PropertyGroup> 
    <TestProperties>/testcontainer:@(Tests->'%(FullPath)')</TestProperties> 
</PropertyGroup> 

können Sie weitere Hilfe finden here

+0

Außer dies funktioniert auch nicht: „Item-Listen kann nicht mit anderen Strings verkettet werden, wo eine Positionsliste wird voraussichtlich ein Semikolon verwenden, um mehrere Stücklisten zu trennen..“ –

+0

Ich habe keine Ahnung wovon du sprichst. Dadurch werden Elementmetadaten wie das angeforderte OP aufgelöst. –

+0

Es tut, aber nur wenn innerhalb eines Ziels verwendet. Außerhalb eines Ziels erzeugt es den Fehler, den ich gepostet habe. –

Verwandte Themen