如何根据msbuild中的条件更改属性的值?

时间:2010-06-15 10:55:52

标签: msbuild

我想更改属性的值,如果它是某个值。在C#中我会写:

if(x=="NotAllowed")
  x="CorrectedValue;

这是我到目前为止,请不要笑:

 <PropertyGroup>
    <BranchName>BranchNameNotSet</BranchName>
  </PropertyGroup>

///Other targets set BranchName

 <Target Name="CheckPropertiesHaveBeenSet">
    <Error Condition="$(BranchName)==BranchNameNotSet" Text="Something has gone wrong.. branch name not entered"/>
      <When Condition="$(BranchName)==master">
        <PropertyGroup>
          <BranchName>MasterBranch</BranchName>
        </PropertyGroup>
      </When>
  </Target>

2 个答案:

答案 0 :(得分:20)

您可以使用Condition上的Property执行此操作:

<PropertyGroup>
  <BranchName>BranchNameNotSet</BranchName>
</PropertyGroup>

<Target Name="CheckPropertiesHaveBeenSet">
  <!-- If BranchName equals 'BranchNameNotSet' stop the build with error-->
  <Error Condition="'$(BranchName)'=='BranchNameNotSet'" Text="Something has gone wrong.. branch name not entered"/>

  <PropertyGroup>
    <!-- Change BranchName value if BranchName equals 'master' -->
    <BranchName Condition="'$(BranchName)'=='master'">MasterBranch</BranchName>
  </PropertyGroup>

</Target>

WhenChoose的信息:

  

“选择”,“时间”和“其他”元素一起使用,以提供一种方法来选择一段代码,以执行多种可能的替代方案。

     

选择元素可以用作Project的子元素,When和else元素。

在您的代码示例中,您使用When而不是Choose且在目标范围内,这是不可能的。

答案 1 :(得分:3)

如果它的值等于'NotAllowed',则将BranchName设置为字符串'CorrectedValue':

<PropertyGroup>
   <BranchName Condition="'$(BranchName)'=='NotAllowed'">CorrectedValue</BranchName>
</PropertyGroup>