2010-10-21 119 views
2

我希望能夠使用另一個屬性的內容引用msbuild(3)屬性。例如:使用另一個屬性的內容引用msbuild屬性

<PropertyGroup> 
     <SelectVariable>Test</SelectVariable> 
     <TestVariable>1</TestVariable> 
     <FullVariable>2</FullVariable> 
    </PropertyGroup> 

    <Message Text="Value $($(SelectVariable)Variable)"/> 

在這種情況下,我想輸出TestVariable的內容(1)。這可能嗎?

回答

2

我不相信這是可能的。但是,你可以實現與ItemGroups類似的效果:

<PropertyGroup> 
    <SelectVariable>Test</SelectVariable> 
</PropertyGroup> 

<ItemGroup> 
    <Variable Include="1"> 
     <Select>Test</Select> 
    </Variable> 
    <Variable Include="2"> 
     <Select>Full</Select> 
    </Variable> 
</ItemGroup> 

<Message Text="@(Variable)" 
     Condition=" '%(Select)' == '$(SelectVariable)' " /> 

這是一個有點笨拙壽...

1

您可以使用<Choose> task來實現類似的東西,但(如彼得說),這很可能是與你渴望擁有短而精悍的東西有一些距離。

也許psake就是答案 - 嵌套表達式和括號,當它沒有這樣的武斷和微不足道的限制:P

+0

我覺得選擇任務就是這裏的答案。 – 2010-10-25 16:03:02

2

相信這是可能只是做:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <SelectVariable>Test</SelectVariable> 
    <TestVariable>1</TestVariable> 
    <FullVariable>2</FullVariable> 
    </PropertyGroup> 

    <Target Name="Demo01"> 
    <PropertyGroup> 
     <Value>$(SelectVariable)Variable</Value> 
    </PropertyGroup> 
    <Message Text="Value $(Value)"/> 
    </Target> 

</Project> 

結果在下面的圖片所示。 alt text

+0

Doh! Sla頭。應該看到一個! – 2010-10-23 10:38:24

+0

我不認爲這就是vicjugador想要的。我想他想要某種反思。在你的例子中,他想輸出TestVariable(1)的值而不是名稱(TestVariable)。我不認爲這是可能的,因爲它需要幾次通過解釋文件... – 2010-10-25 16:01:49

+0

本傑明是正確的..我想要的輸出是TestVariable(1)..的內容,而不是TestVariable的名稱。 – vicsz 2010-10-25 18:25:15

相關問題