Konfigurace cílení na více verzí

Aplikace .NET Multi-Platform App UI (.NET MAUI) používají k cílení na více platforem z jednoho projektu více platforem.

Projekt aplikace .NET MAUI obsahuje složku Platformy s každou podřízenou složkou představující platformu, na kterou může .NET MAUI cílit:

Snímek obrazovky s složkami platformy

Složky pro každou cílovou platformu obsahují kód specifický pro platformu, který spouští aplikaci na každé platformě a veškerý další kód platformy, který přidáte. V době sestavení systém sestavení zahrnuje pouze kód z každé složky při sestavování pro danou konkrétní platformu. Když například sestavíte soubory pro Android ve složce Platformy>pro Android , budou součástí balíčku aplikace, ale soubory v jiných složkách Platformy nebudou.

Kromě tohoto výchozího přístupu pro více cílení můžou být aplikace .NET MAUI také více cílené na základě vlastních kritérií názvu souboru a složky. To umožňuje strukturovat projekt aplikace .NET MAUI tak, abyste nemuseli kód platformy umístit do podsložek složky Platformy .

Konfigurace cílení na více souborů na základě názvu souboru

Standardní model cílení na více platforem je zahrnout platformu jako rozšíření do názvu souboru kódu platformy. Například MyService.Android.cs představuje implementaci MyService třídy specifickou pro Android. Systém sestavení lze nakonfigurovat tak, aby používal tento vzor přidáním následujícího XML do souboru aplikace .NET MAUI (.csproj) jako podřízené <Project> položky uzlu:

<!-- Android -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-android')) != true">
  <Compile Remove="**\*.Android.cs" />
  <None Include="**\*.Android.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- Both iOS and Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true AND $(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
  <Compile Remove="**\*.MaciOS.cs" />
  <None Include="**\*.MaciOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- iOS -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true">
  <Compile Remove="**\*.iOS.cs" />
  <None Include="**\*.iOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
  <Compile Remove="**\*.MacCatalyst.cs" />
  <None Include="**\*.MacCatalyst.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- Windows -->
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true">
  <Compile Remove="**\*.Windows.cs" />
  <None Include="**\*.Windows.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

Tento XML nakonfiguruje systém sestavení tak, aby odebral vzory názvů souborů založených na platformě za určitých podmínek:

  • Nekompilujte kód jazyka C#, jehož název souboru končí . Android.cs, pokud nestavíte pro Android.
  • Nekompilujte kód jazyka C#, jehož název souboru končí . MaciOS.cs, pokud nestavíte pro iOS a Mac Catalyst.
  • Nekopilujte kód jazyka C#, jehož název souboru končí příponou .iOS.cs, pokud nestavíte pro iOS.
  • Nekompilujte kód jazyka C#, jehož název souboru končí . MacCatalyst.cs, pokud nestavíte pro Mac Catalyst.
  • Nekompilujte kód jazyka C#, jehož název souboru končí . Windows.cs, pokud nestavíte windows.

Důležité

Cílení na více souborů je možné kombinovat s cílením na více složek. Další informace najdete v tématu Kombinování názvů souborů a složek s více cíleními.

Konfigurace cílení na více složek

Dalším standardním vzorem cílení na více platforem je zahrnout platformu jako název složky. Například složka s názvem Android by obsahovala kód specifický pro Android. Systém sestavení lze nakonfigurovat tak, aby používal tento vzor přidáním následujícího XML do souboru aplikace .NET MAUI (.csproj) jako podřízené <Project> položky uzlu:

<!-- Android -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-android')) != true">
  <Compile Remove="**\Android\**\*.cs" />
  <None Include="**\Android\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- Both iOS and Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true AND $(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
  <Compile Remove="**\MaciOS\**\*.cs" />
  <None Include="**\MaciOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- iOS -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true">
  <Compile Remove="**\iOS\**\*.cs" />
  <None Include="**\iOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
  <Compile Remove="**\MacCatalyst\**\*.cs" />
  <None Include="**\MacCatalyst\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- Windows -->
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true">
  <Compile Remove="**\Windows\**\*.cs" />
  <None Include="**\Windows\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

Tento XML nakonfiguruje systém sestavení tak, aby odebral vzory složek založených na platformě za určitých podmínek:

  • Nekopilujte kód jazyka C#, který se nachází ve složce Android nebo podsložce složky Android , pokud pro Android nestavíte.
  • Nekopilujte kód jazyka C#, který se nachází ve složce MaciOS nebo podsložce složky MaciOS , pokud nestavíte pro iOS a Mac Catalyst.
  • Nekopilujte kód jazyka C#, který se nachází ve složce iOS nebo podsložce složky iOS , pokud nestavíte pro iOS.
  • Nekopilujte kód jazyka C#, který se nachází ve složce MacCatalyst nebo podsložce složky MacCatalyst , pokud nestavíte pro Mac Catalyst.
  • Nekopilujte kód jazyka C#, který se nachází ve složce Windows nebo podsložce složky Windows , pokud nestavíte pro Windows.

Důležité

Cílení na více složek je možné kombinovat s více cíleními na názvy souborů. Další informace najdete v tématu Kombinování názvů souborů a složek s více cíleními.

Kombinování více cílových souborů a složek

V případě potřeby je možné cílení na více souborů kombinovat s cílením na více složek. Systém sestavení lze nakonfigurovat tak, aby používal tento vzor přidáním následujícího XML do souboru aplikace .NET MAUI (.csproj) jako podřízené <Project> položky uzlu:

<!-- Android -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-android')) != true">
  <Compile Remove="**\*.Android.cs" />
  <None Include="**\*.Android.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
  <Compile Remove="**\Android\**\*.cs" />
  <None Include="**\Android\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />  
</ItemGroup>

<!-- Both iOS and Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true AND $(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
  <Compile Remove="**\*.MaciOS.cs" />
  <None Include="**\*.MaciOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
  <Compile Remove="**\MaciOS\**\*.cs" />
  <None Include="**\MaciOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- iOS -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true">
  <Compile Remove="**\*.iOS.cs" />
  <None Include="**\*.iOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
  <Compile Remove="**\iOS\**\*.cs" />
  <None Include="**\iOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />  
</ItemGroup>

<!-- Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
  <Compile Remove="**\*.MacCatalyst.cs" />
  <None Include="**\*.MacCatalyst.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
  <Compile Remove="**\MacCatalyst\**\*.cs" />
  <None Include="**\MacCatalyst\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>

<!-- Windows -->
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true">
  <Compile Remove="**\*.Windows.cs" />
  <None Include="**\*.Windows.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
  <Compile Remove="**\Windows\**\*.cs" />
  <None Include="**\Windows\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />  
</ItemGroup>

Tento XML nakonfiguruje systém sestavení tak, aby za určitých podmínek odebral vzory souborů a složek založených na platformě:

  • Nekompilujte kód jazyka C#, jehož název souboru končí . Android.cs nebo se nachází ve složce Androidu nebo v podsložce složky Android, pokud pro Android nestavíte.
  • Nekompilujte kód jazyka C#, jehož název souboru končí . MaciOS.cs nebo se nachází ve složce MaciOS nebo podsložce složky MaciOS , pokud nestavíte pro iOS a Mac Catalyst.
  • Nekopilujte kód jazyka C#, jehož název končí souborem .iOS.cs nebo který se nachází ve složce iOS nebo podsložce složky iOS , pokud nestavíte pro iOS.
  • Nekompilujte kód jazyka C#, jehož název souboru končí . MacCatalyst.cs nebo se nachází ve složce MacCatalyst nebo podsložce složky MacCatalyst , pokud nestavíte pro Mac Catalyst.
  • Nekompilujte kód jazyka C#, jehož název souboru končí . Windows.cs nebo se nachází ve složce Windows nebo v podsložce složky Windows , pokud pro Windows nestavíte.