When, element (MSBuild)

Określa możliwy blok kodu do wybrania Choose elementu.

<Projekt>wybierany><po><wybraniu>... <<W przeciwnym razie><wybierz> pozycję ...

Składnia

<When Condition="'StringA'=='StringB'">
    <PropertyGroup>... </PropertyGroup>
    <ItemGroup>... </ItemGroup>
    <Choose>... </Choose>
</When>

Atrybuty i elementy

W poniższych sekcjach opisano atrybuty, elementy podrzędne i elementy nadrzędne.

Atrybuty

Atrybut opis
Warunek Atrybut wymagany.

Warunek do oceny. Aby uzyskać więcej informacji, zobacz Warunki.

Elementy podrzędne

Element opis
Wybierz Element opcjonalny.

Ocenia elementy podrzędne, aby wybrać jedną sekcję kodu do wykonania. Element może zawierać zero lub więcej Choose elementów When .
Itemgroup Element opcjonalny.

Zawiera zestaw elementów elementu zdefiniowanego przez użytkownika. Element może zawierać zero lub więcej ItemGroup elementów When .
Propertygroup Element opcjonalny.

Zawiera zestaw elementów właściwości zdefiniowanych przez użytkownika. Element może zawierać zero lub więcej PropertyGroup elementów When .

Elementy nadrzędne

Element opis
Wybierz element (MSBuild) Ocenia elementy podrzędne, aby wybrać jedną sekcję kodu do wykonania.

Uwagi

Condition Jeśli atrybut ma wartość true, element podrzędny ItemGroup i PropertyGroup elementy elementu są wykonywane, a wszystkie kolejne When elementy When zostaną pominięte.

ChooseElementy , Wheni Otherwise są używane razem, aby zapewnić sposób wybierania jednej sekcji kodu do wykonania z wielu możliwych alternatyw. Aby uzyskać więcej informacji, zobacz Konstrukcje warunkowe.

Przykład

Poniższy projekt używa Choose elementu , aby wybrać zestaw wartości właściwości w elementach When do ustawienia. Condition Jeśli atrybuty obu When elementów mają wartość false, zostaną ustawione wartości właściwości w elemecie Otherwise . Podczas uruchamiania przykładu spróbuj przekazać różne ustawienia właściwości z wiersza polecenia, na przykład msbuild myproj.proj -p:Configuration=Test;Platform=x86, i zobaczyć, jak wygląda ścieżka wyjściowa. W przykładzie przyjęto założenie, że wymagane jest ustawienie pewnych właściwości kompilacji debugowania i wydania, w tym folderu wyjściowego opartego na bitowości platformy, a nie rzeczywistej nazwy platformy, a także obsługę konfiguracji "Test" i "Retail", ale traktują "Retail" jako "Release".

<Project>
    <PropertyGroup>
       <Configuration Condition="$(Configuration) == ''">Debug</Configuration>
       <Platform Condition="$(Platform) == ''">x64</Platform>
    </PropertyGroup>

  <Choose>
     <When Condition="$(Configuration)=='Test'">
        <PropertyGroup>
            <DebugSymbols>true</DebugSymbols>
            <DebugType>full</DebugType>
            <Optimize>false</Optimize>
            <DefineConstants>DEBUG;TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
            <PropertyGroup>
                <OutputPath>.\bin\Test\32-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
            <PropertyGroup>
                <OutputPath>.\bin\Test\64-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <!-- For any other platform, use the platform name -->
          <Otherwise>
            <PropertyGroup>
              <OutputPath>.\bin\Test\$(Platform)\</OutputPath>
            </PropertyGroup>
          </Otherwise>
        </Choose>
      </When>
      <When Condition="$(Configuration)=='Retail' Or $(Configuration)=='Release'">
        <PropertyGroup>
            <DebugSymbols>false</DebugSymbols>
            <Optimize>true</Optimize>
            <DefineConstants>TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
             <PropertyGroup>
                <OutputPath>.\bin\Release\32-bit\</OutputPath>
             </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
             <PropertyGroup>
                <OutputPath>.\bin\Release\64-bit\</OutputPath>
             </PropertyGroup>
          </When>
          <!-- For any other platform, use the platform name -->
          <Otherwise>
            <PropertyGroup>
                <OutputPath>.\bin\Release\$(Platform)\</OutputPath>
            </PropertyGroup>
          </Otherwise>
        </Choose>
      </When>
      <!-- For any other configuration, use debug properties-->
      <Otherwise>
        <PropertyGroup>
            <DebugSymbols>true</DebugSymbols>
            <DebugType>full</DebugType>
            <Optimize>false</Optimize>
            <DefineConstants>DEBUG;TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform)=='ARM32'">
            <PropertyGroup>
              <OutputPath>.\bin\$(Configuration)\32-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform)=='ARM64'">
            <PropertyGroup>
              <OutputPath>.\bin\$(Configuration)\64-bit\</OutputPath>
            </PropertyGroup>
          </When>
        </Choose>
       </Otherwise>
  </Choose>

  <Target Name="ShowProperties">
    <Message Text="DebugSymbols: $(DebugSymbols)"/>
    <Message Text="Optimize: $(Optimize)"/>
    <Message Text="DefineConstants: $(DefineConstants)"/>
    <Message Text="OutputPath: $(OutputPath)"/>
  </Target>
</Project>

Zobacz też