使用另一个属性的内容引用msbuild属性

时间:2010-10-21 18:00:34

标签: msbuild

我希望能够使用另一个属性的内容引用msbuild(3)属性。例如:

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

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

在这种情况下,我想要输出TestVariable的内容(1)。这可能吗?

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:1)

你可以使用<Choose> task来实现类似的东西,但是(正如彼得所说的那样)可能与你想要短暂而精辟的东西有一段距离。

也许psake就是答案 - 在嵌套表达式和括号时没有这样的任意和微不足道的限制:P