Как изменить значение свойства на основе условного выражения в msbuild?

Я хотел бы изменить значение свойства, если оно является определенным значением. В С# я бы написал:

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>

Ответы

Ответ 1

Вы можете сделать это, используя 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>

Информация в When и Choose:

Элементы "Выбрать", "Когда" и "В противном случае" используются вместе, чтобы обеспечить способ выбора одного раздела кода для выполнения из нескольких возможных альтернатив.

Выбрать элементы можно в качестве дочерних элементов элементов Project, When и Otherwise.

В вашем примере кода вы используете When без Choose и внутри цели, что невозможно.

Ответ 2

это устанавливает BranchName в строку "CorrectedValue", если значение равно "NotAllowed":

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