Teilen über


Konfigurieren von Multi-Targeting

.NET Multi-Platform App UI (.NET MAUI)-Apps verwenden multiadressieren, um mehrere Plattformen aus einem einzelnen Projekt zu erreichen.

Das Projekt für eine .NET MAUI-App enthält einen Ordner "Plattformen" , wobei jeder untergeordnete Ordner eine Plattform darstellt, auf die .NET MAUI ausgerichtet werden kann:

Screenshot von Plattformordnern.

Die Ordner für jede Zielplattform enthalten plattformspezifischen Code, der die App auf jeder Plattform startet, sowie alle zusätzlichen Plattformcodes, die Sie hinzufügen. Zum Buildzeitpunkt enthält das Buildsystem nur den Code aus jedem Ordner beim Erstellen für diese bestimmte Plattform. Wenn Sie beispielsweise für Android erstellen, werden die Dateien im Ordner "Plattformen>Android " in das App-Paket integriert, die Dateien in den anderen Ordnern "Plattformen " sind jedoch nicht vorhanden.

Zusätzlich zu diesem standardmäßigen Multi-Targeting-Ansatz können .NET MAUI-Apps auch multizieliv sein, basierend auf Ihren eigenen Dateinamen- und Ordnerkriterien. Auf diese Weise können Sie Ihr .NET MAUI-App-Projekt strukturieren, sodass Sie ihren Plattformcode nicht in Unterordner des Ordners "Plattformen " platzieren müssen.

Konfigurieren von Dateiname-basierten multi-Targeting

Ein standardmäßiges Multi-Targeting-Muster besteht darin, die Plattform als Erweiterung im Dateinamen für den Plattformcode einzuschließen. Beispielsweise würde MyService.Android.cs eine Android-spezifische Implementierung der MyService Klasse darstellen. Das Buildsystem kann so konfiguriert werden, dass dieses Muster verwendet wird, indem Sie der .NET MAUI-App-Projektdatei (.csproj) als untergeordnete Elemente des <Project> Knotens folgendes XML hinzufügen:

<!-- 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>

In diesem XML wird das Buildsystem so konfiguriert, dass plattformbasierte Dateinamenmuster unter bestimmten Bedingungen entfernt werden:

  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit . Android.cs, wenn Sie nicht für Android erstellen.
  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit . MaciOS.cs, wenn Sie nicht für iOS und Mac Catalyst erstellen.
  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit .iOS.cs endet, wenn Sie nicht für iOS erstellen.
  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit . MacCatalyst.cs, wenn Sie nicht für Mac Catalyst erstellen.
  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit . Windows.cs, wenn Sie nicht für Windows erstellen.

Wichtig

Dateinamebasiertes Multi-Targeting kann mit ordnerbasiertem Multi-Targeting kombiniert werden. Weitere Informationen finden Sie unter Kombinieren von Dateinamen und Ordnern mit multi-targeting.

Konfigurieren von ordnerbasierten multi-Targeting

Ein weiteres standardbasiertes Multi-Targeting-Muster besteht darin, die Plattform als Ordnernamen einzuschließen. Ein Ordner mit dem Namen Android würde beispielsweise Android-spezifischen Code enthalten. Das Buildsystem kann so konfiguriert werden, dass dieses Muster verwendet wird, indem Sie der .NET MAUI-App-Projektdatei (.csproj) als untergeordnete Elemente des <Project> Knotens folgendes XML hinzufügen:

<!-- 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>

In diesem XML wird das Buildsystem so konfiguriert, dass plattformbasierte Ordnermuster unter bestimmten Bedingungen entfernt werden:

  • Kompilieren Sie keinen C#-Code, der sich im Android-Ordner oder unterordner des Android-Ordners befindet, wenn Sie für Android nicht erstellen.
  • Kompilieren Sie keinen C#-Code, der sich im MaciOS-Ordner befindet, oder unterordner des MaciOS-Ordners , wenn Sie nicht für iOS und Mac Catalyst erstellen.
  • Kompilieren Sie keinen C#-Code, der sich im iOS-Ordner oder unterordner des iOS-Ordners befindet, wenn Sie nicht für iOS erstellen.
  • Kompilieren Sie keinen C#-Code, der sich im Ordner "MacCatalyst " oder im Unterordner des Ordners "MacCatalyst " befindet, wenn Sie für Mac Catalyst nicht erstellen.
  • Kompilieren Sie keinen C#-Code, der sich im Windows-Ordner oder unterordner des Windows-Ordners befindet, wenn Sie für Windows nicht erstellen.

Wichtig

Ordnerbasiertes Multi-Targeting kann mit dateibasiertem Multi-Targeting kombiniert werden. Weitere Informationen finden Sie unter Kombinieren von Dateinamen und Ordnern mit multi-targeting.

Kombinieren von Dateinamen und Ordnern mit multi-Targeting

Dateinamebasiertes Multi-Targeting kann bei Bedarf mit ordnerbasiertem Multi-Targeting kombiniert werden. Das Buildsystem kann so konfiguriert werden, dass dieses Muster verwendet wird, indem Sie der .NET MAUI-App-Projektdatei (.csproj) als untergeordnete Elemente des <Project> Knotens folgendes XML hinzufügen:

<!-- 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>

In diesem XML wird das Buildsystem so konfiguriert, dass plattformbasierte Dateinamen- und Ordnermuster unter bestimmten Bedingungen entfernt werden:

  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit . Android.cs oder das sich im Android-Ordner oder Unterordner des Android-Ordners befindet, wenn Sie nicht für Android erstellen.
  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit . MaciOS.cs oder das sich im MaciOS-Ordner oder Unterordner des MaciOS-Ordners befindet, wenn Sie nicht für iOS und Mac Catalyst erstellen.
  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit .iOS.cs endet oder sich im iOS-Ordner oder Unterordner des iOS-Ordners befindet, wenn Sie nicht für iOS erstellen.
  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit . MacCatalyst.cs oder das sich im MacCatalyst-Ordner oder Unterordner des MacCatalyst-Ordners befindet, wenn Sie nicht für Mac Catalyst erstellen.
  • Kompilieren Sie keinen C#-Code, dessen Dateiname mit . Windows.cs oder das sich im Windows-Ordner oder Unterordner des Windows-Ordners befindet, wenn Sie für Windows nicht erstellen.