Partager via


Configurer le multi-ciblage

Les applications .NET Multiplateforme App UI (.NET MAUI) utilisent un ciblage multiple pour cibler plusieurs plateformes à partir d’un seul projet.

Le projet d’une application .NET MAUI contient un dossier Plateformes , avec chaque dossier enfant représentant une plateforme que .NET MAUI peut cibler :

Capture d’écran des dossiers de plateforme.

Les dossiers de chaque plateforme cible contiennent du code spécifique à la plateforme qui démarre l’application sur chaque plateforme, ainsi que tout code de plateforme supplémentaire que vous ajoutez. Au moment de la génération, le système de génération inclut uniquement le code de chaque dossier lors de la génération de cette plateforme spécifique. Par exemple, lorsque vous générez des fichiers Android dans le dossier Plateformes>Android sera intégré au package d’application, mais les fichiers des autres dossiers Plateformes ne seront pas.

En plus de cette approche multi-ciblage par défaut, les applications .NET MAUI peuvent également être multi-ciblées en fonction de vos propres critères de nom de fichier et de dossier. Cela vous permet de structurer votre projet d’application .NET MAUI afin que vous n’ayez pas à placer votre code de plateforme dans les sous-dossiers du dossier Plateformes .

Configurer le multi-ciblage basé sur un nom de fichier

Un modèle de multi-ciblage standard consiste à inclure la plateforme en tant qu’extension dans le nom de fichier du code de la plateforme. Par exemple, MyService.Android.cs représente une implémentation spécifique à Android de la MyService classe. Le système de génération peut être configuré pour utiliser ce modèle en ajoutant le code XML suivant à votre projet d’application .NET MAUI (.csproj) en tant qu’enfants du <Project> nœud :

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

Ce code XML configure le système de génération pour supprimer les modèles de nom de fichier basés sur la plateforme dans des conditions spécifiques :

  • Ne compilez pas le code C# dont le nom de fichier se termine par . Android.cs, si vous ne créez pas pour Android.
  • Ne compilez pas le code C# dont le nom de fichier se termine par . MaciOS.cs, si vous ne créez pas pour iOS et Mac Catalyst.
  • Ne compilez pas le code C# dont le nom de fichier se termine par .iOS.cs, si vous ne créez pas pour iOS.
  • Ne compilez pas le code C# dont le nom de fichier se termine par . MacCatalyst.cs, si vous ne créez pas pour Mac Catalyst.
  • Ne compilez pas le code C# dont le nom de fichier se termine par . Windows.cs, si vous ne créez pas pour Windows.

Important

Le multi-ciblage basé sur un nom de fichier peut être combiné avec le multi-ciblage basé sur des dossiers. Pour plus d’informations, consultez Combiner le nom de fichier et le multi-ciblage de dossiers.

Configurer le multi-ciblage basé sur des dossiers

Un autre modèle de multi-ciblage standard consiste à inclure la plateforme en tant que nom de dossier. Par exemple, un dossier nommé Android contient du code spécifique à Android . Le système de génération peut être configuré pour utiliser ce modèle en ajoutant le code XML suivant à votre projet d’application .NET MAUI (.csproj) en tant qu’enfants du <Project> nœud :

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

Ce code XML configure le système de génération pour supprimer les modèles de dossiers basés sur la plateforme dans des conditions spécifiques :

  • Ne compilez pas de code C# situé dans le dossier Android ou sous-dossier du dossier Android , si vous ne créez pas pour Android.
  • Ne compilez pas de code C# situé dans le dossier MaciOS ou sous-dossier du dossier MaciOS , si vous ne créez pas pour iOS et Mac Catalyst.
  • Ne compilez pas de code C# situé dans le dossier iOS ou sous-dossier du dossier iOS, si vous ne créez pas pour iOS.
  • Ne compilez pas de code C# situé dans le dossier MacCatalyst ou sous-dossier du dossier MacCatalyst , si vous ne créez pas pour Mac Catalyst.
  • Ne compilez pas de code C# situé dans le dossier Windows , ou sous-dossier du dossier Windows , si vous ne créez pas pour Windows.

Important

Le multi-ciblage basé sur des dossiers peut être combiné avec le multi-ciblage basé sur un nom de fichier. Pour plus d’informations, consultez Combiner le nom de fichier et le multi-ciblage de dossiers.

Combiner le nom de fichier et le multi-ciblage de dossiers

Le multi-ciblage basé sur un nom de fichier peut être combiné avec le multi-ciblage basé sur des dossiers si nécessaire. Le système de génération peut être configuré pour utiliser ce modèle en ajoutant le code XML suivant à votre projet d’application .NET MAUI (.csproj) en tant qu’enfants du <Project> nœud :

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

Ce code XML configure le système de build pour supprimer les modèles de nom de fichier et de dossier basés sur la plateforme dans des conditions spécifiques :

  • Ne compilez pas le code C# dont le nom de fichier se termine par . Android.cs, ou qui se trouve dans le dossier Android ou sous-dossier du dossier Android , si vous ne créez pas pour Android.
  • Ne compilez pas le code C# dont le nom de fichier se termine par . MaciOS.cs, ou qui se trouve dans le dossier MaciOS ou sous-dossier du dossier MaciOS , si vous ne créez pas pour iOS et Mac Catalyst.
  • Ne compilez pas le code C# dont le nom de fichier se termine par .iOS.cs, ou qui se trouve dans le dossier iOS ou sous-dossier du dossier iOS , si vous ne créez pas pour iOS.
  • Ne compilez pas le code C# dont le nom de fichier se termine par . MacCatalyst.cs, ou qui se trouve dans le dossier MacCatalyst ou sous-dossier du dossier MacCatalyst , si vous ne créez pas pour Mac Catalyst.
  • Ne compilez pas le code C# dont le nom de fichier se termine par . Windows.cs, ou qui se trouve dans le dossier Windows ou sous-dossier du dossier Windows , si vous ne créez pas pour Windows.