Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le app dell'interfaccia utente multipiattaforma di .NET MAUI utilizzano il multitargeting per indirizzare più piattaforme da un singolo progetto.
Il progetto di un'app .NET MAUI contiene una cartella Platforms, con ogni cartella figlia che rappresenta una piattaforma che .NET MAUI può supportare:
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 durante la compilazione per tale piattaforma specifica. Ad esempio, quando si compila per Android i file nella cartella Piattaforme>Android verranno incorporati nel pacchetto dell'app, ma i file nelle altre cartelle Piattaforme non saranno.
Oltre a questo approccio predefinito di multi-targeting, le app .NET MAUI possono anche essere configurate per il multi-targeting in base ai propri criteri di nome file e cartella. In questo modo è possibile strutturare il progetto di app .NET MAUI in modo che non sia necessario inserire il codice della piattaforma in sottocartelle della cartella Piattaforme .
Configurare il multitargeting basato su nome file
Un modello standard di multitargeting prevede l'inclusione della piattaforma come estensione nel nome del file per il codice della piattaforma. Ad esempio, MyService.Android.cs rappresenterebbe un'implementazione specifica di Android della MyService classe . Il sistema di build può essere configurato per usare questo modello aggiungendo il seguente codice XML al file di progetto dell'app .NET MAUI (.csproj) come nodi figli del tag <Project>.
<!-- 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 nome file basati sulla piattaforma in condizioni specifiche:
- Non compilare il codice C# il cui nome file termina con . Android.cs, se non si compila 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 compila per iOS.
- Non compilare il codice C# il cui nome file termina con . MacCatalyst.cs, se non stai creando per Mac Catalyst.
- Non compilare il codice C# il cui nome file termina con . Windows.cs, se non si compila per Windows.
Importante
Il multitargeting basato su nome file può essere combinato con multitargeting basato su cartelle. Per ulteriori informazioni, vedere Combinare il nome file e cartelle con destinazioni multiple.
Configurare il multitargeting basato su cartella
Un altro modello standard di multitargeting consiste nell'includere la piattaforma come nome di cartella. Ad esempio, una cartella denominata Android conterrà codice specifico di Android. Il sistema di build può essere configurato per utilizzare questo modello aggiungendo il seguente codice XML al file di progetto dell'app .NET MAUI (.csproj) come elementi figlio del nodo <Project>:
<!-- 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 cartella basati sulla piattaforma in condizioni specifiche:
- Non compilare il codice C# che si trova nella cartella Android, o in una sottocartella della cartella Android, se non stai compilando per Android.
- Non compilare codice C# che si trova nella cartella MaciOS o nella sottocartella della cartella MaciOS , se non si compila per iOS e Mac Catalyst.
- Non compilare codice C# che si trova nella cartella iOS o nella sottocartella della cartella iOS , se non si compila per iOS.
- Non compilare il codice C# che si trova nella cartella MacCatalyst o nella sottocartella della cartella MacCatalyst , se non si compila per Mac Catalyst.
- Non compilare il codice C# che si trova nella cartella Windows o nella sottocartella della cartella Windows , se non si compila per Windows.
Importante
Il multitargeting basato su cartelle può essere combinato con multitargeting basato su nome file. Per ulteriori informazioni, vedere Combinare nome file e cartella con destinazione multipla.
Combinare il nome del file e la cartella per il multi-targeting
Se necessario, è possibile combinare multitargeting basato su nomi di file con multitargeting basato su cartelle. Il sistema di compilazione può essere configurato per usare questo schema aggiungendo il codice XML seguente al file di progetto dell'app MAUI .NET (con estensione .csproj) come elementi figlio del nodo <Project>.
<!-- 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 nome file e cartelle basati sulla piattaforma in condizioni specifiche:
- Non compilare codice C# il cui nome termina con .Android.cs, o che si trova nella cartella Android o in una sua sottocartella, se non si sta compilando 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 compila 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 compila 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 compila per Mac Catalyst.
- Non compilare il codice C# il cui nome file termina con . Windows.cs, o che si trova nella cartella Windows o nella sottocartella della cartella Windows , se non si compila per Windows.