Condividi tramite


Configurare multi-targeting

Le app .NET Multipiattaforma App (.NET MAUI) usano più target per indirizzare più piattaforme da un singolo progetto.

Il progetto per un'app MAUI .NET contiene una cartella Platform , con ogni cartella figlio che rappresenta una piattaforma che .NET MAUI può essere destinata:

Screenshot delle cartelle della piattaforma.

Le cartelle per ogni piattaforma di destinazione contengono codice specifico della piattaforma che avvia l'app in ogni piattaforma, oltre a qualsiasi codice aggiuntivo della piattaforma aggiunto. In fase di compilazione, il sistema di compilazione include solo il codice di ogni cartella necessario per la compilazione per la piattaforma specifica. Ad esempio, quando si compila per Android i file nella cartella PlatformAndroid verranno incorporati nel pacchetto dell'app, ma i file nelle altre cartelle Piattaforme> non saranno.

Oltre a questo approccio multi-targeting predefinito, le app .NET MAUI possono essere anche multi target in base ai propri criteri di nome file e cartelle. Ciò consente di strutturare il progetto di app .NET MAUI in modo che non sia necessario inserire il codice della piattaforma nelle sottocartelle della cartella Piattaforme .

Configurare il multi-targeting basato su nome file

Un modello di multi-destinazione standard consiste nell'includere la piattaforma come estensione nel nome del file per il codice della piattaforma. Ad esempio, MyService.Android.cs rappresenta un'implementazione specifica di Android della MyService classe. Il sistema di compilazione può essere configurato per usare questo modello aggiungendo il codice XML seguente al file .NET MAUI app project (.csproj) come elementi figlio del <Project> nodo:

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

Questo CODICE XML configura il sistema di compilazione per rimuovere i modelli di file basati sulla piattaforma in condizioni specifiche:

  • Non compilare il codice C# il cui nome file termina con . Android.cs, se non si sta creando per Android.
  • Non compilare il codice C# il cui nome file termina con . MaciOS.cs, se non si sta creando per iOS e Mac Catalyst.
  • Non compilare il codice C# il cui nome file termina con .iOS.cs, se non si sta creando per iOS.
  • Non compilare il codice C# il cui nome file termina con . MacCatalyst.cs, se non si sta creando per Mac Catalyst.
  • Non compilare il codice C# il cui nome file termina con . Windows.cs, se non si sta creando per Windows.

Importante

Il multi-targeting basato su nome file può essere combinato con il multi-targeting basato su cartelle. Per altre informazioni, vedere Combinare nome file e cartella con più destinazione.

Configurare il multi-targeting basato su cartelle

Un altro modello di multi-destinazione standard consiste nell'includere la piattaforma come nome della cartella. Ad esempio, una cartella denominata Android contiene codice specifico di Android . Il sistema di compilazione può essere configurato per usare questo modello aggiungendo il codice XML seguente al file .NET MAUI app project (.csproj) come elementi figlio del <Project> nodo:

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

Questo CODICE XML configura il sistema di compilazione per rimuovere i modelli di cartelle basati sulla piattaforma in condizioni specifiche:

  • Non compilare il codice C# che si trova nella cartella Android o nella sottocartella della cartella Android , se non si sta creando per Android .
  • Non compilare il codice C# che si trova nella cartella MaciOS o nella sottocartella della cartella MaciOS , se non si sta creando per iOS e Mac Catalyst.
  • Non compilare il codice C# che si trova nella cartella iOS o nella sottocartella della cartella iOS, se non si sta creando per iOS .
  • Non compilare il codice C# che si trova nella cartella MacCatalyst o nella sottocartella della cartella MacCatalyst , se non si sta creando per Mac Catalyst.
  • Non compilare il codice C# che si trova nella cartella Di Windows o nella sottocartella della cartella di Windows , se non si sta creando per Windows.

Importante

Il multi-targeting basato su cartelle può essere combinato con il multi-targeting basato su nome file. Per altre informazioni, vedere Combinare nome file e cartella con più destinazione.

Combinare il nome del file e la cartella con più destinazione

Se necessario, è possibile combinare più destinazioni basate su file con più cartella. Il sistema di compilazione può essere configurato per usare questo modello aggiungendo il codice XML seguente al file .NET MAUI app project (.csproj) come elementi figlio del <Project> nodo:

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

Questo CODICE XML configura il sistema di compilazione per rimuovere i modelli di file e cartelle basati sulla piattaforma in condizioni specifiche:

  • Non compilare il codice C# il cui nome file termina con . Android.cs o che si trova nella cartella Android o nella sottocartella della cartella Android, se non si sta creando per Android .
  • Non compilare il codice C# il cui nome file termina con . MaciOS.cs o che si trova nella cartella MaciOS o nella sottocartella della cartella MaciOS , se non si sta creando per iOS e Mac Catalyst.
  • Non compilare il codice C# il cui nome file termina con .iOS.cs o che si trova nella cartella iOS o nella sottocartella della cartella iOS , se non si sta creando per iOS.
  • Non compilare il codice C# il cui nome file termina con . MacCatalyst.cs o che si trova nella cartella MacCatalyst o nella sottocartella della cartella MacCatalyst, se non si sta creando per Mac Catalyst.
  • Non compilare il codice C# il cui nome file termina con . Windows.cs o che si trova nella cartella Di Windows o nella sottocartella della cartella di Windows , se non si sta creando per Windows.