Bagikan melalui


Mengonfigurasi multi-penargetan

Aplikasi .NET Multi-platform App UI (.NET MAUI) menggunakan multi-penargetan untuk menargetkan beberapa platform dari satu proyek.

Proyek untuk aplikasi .NET MAUI berisi folder Platform , dengan setiap folder anak mewakili platform yang dapat ditargetkan .NET MAUI:

Cuplikan layar folder platform.

Folder untuk setiap platform target berisi kode khusus platform yang memulai aplikasi di setiap platform, ditambah kode platform tambahan yang Anda tambahkan. Pada waktu build, sistem build hanya menyertakan kode dari setiap folder saat membangun untuk platform tertentu. Misalnya, ketika Anda membuat untuk Android, file di folder Platform Android> akan dibangun ke dalam paket aplikasi, tetapi file di folder Platform lain tidak akan.

Selain pendekatan multi-penargetan default ini, aplikasi .NET MAUI juga dapat ditargetkan secara multi-target berdasarkan nama file dan kriteria folder Anda sendiri. Ini memungkinkan Anda untuk menyusun proyek aplikasi .NET MAUI Anda sehingga Anda tidak perlu menempatkan kode platform Anda ke dalam sub-folder folder Platform .

Mengonfigurasi penargetan multi-nama file berbasis

Pola multi-penargetan standar adalah menyertakan platform sebagai ekstensi dalam nama file untuk kode platform. Misalnya, MyService.Android.cs akan mewakili implementasi MyService kelas khusus Android. Sistem build dapat dikonfigurasi untuk menggunakan pola ini dengan menambahkan XML berikut ke file proyek aplikasi .NET MAUI (.csproj) Anda sebagai turunan dari <Project> simpul:

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

XML ini mengonfigurasi sistem build untuk menghapus pola nama file berbasis platform dalam kondisi tertentu:

  • Jangan mengkompilasi kode C# yang nama file-nya berakhir dengan . Android.cs, jika Anda tidak membangun untuk Android.
  • Jangan mengkompilasi kode C# yang nama file-nya berakhir dengan . MaciOS.cs, jika Anda tidak membangun untuk iOS dan Mac Catalyst.
  • Jangan mengkompilasi kode C# yang nama file-nya berakhiran dengan .iOS.cs, jika Anda tidak membangun untuk iOS.
  • Jangan mengkompilasi kode C# yang nama file-nya berakhir dengan . MacCatalyst.cs, jika Anda tidak membangun untuk Mac Catalyst.
  • Jangan mengkompilasi kode C# yang nama file-nya berakhir dengan . Windows.cs, jika Anda tidak membangun untuk Windows.

Penting

Penargetan multi-nama file dapat dikombinasikan dengan multi-penargetan berbasis folder. Untuk informasi selengkapnya, lihat Menggabungkan nama file dan multi-penargetan folder.

Mengonfigurasi multi-penargetan berbasis folder

Pola multi-penargetan standar lainnya adalah menyertakan platform sebagai nama folder. Misalnya, folder bernama Android akan berisi kode khusus Android. Sistem build dapat dikonfigurasi untuk menggunakan pola ini dengan menambahkan XML berikut ke file proyek aplikasi .NET MAUI (.csproj) Anda sebagai turunan dari <Project> simpul:

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

XML ini mengonfigurasi sistem build untuk menghapus pola folder berbasis platform dalam kondisi tertentu:

  • Jangan mengkompilasi kode C# yang terletak di folder Android , atau sub-folder folder Android , jika Anda tidak membangun untuk Android.
  • Jangan mengkompilasi kode C# yang terletak di folder MaciOS , atau sub-folder folder MaciOS , jika Anda tidak membangun untuk iOS dan Mac Catalyst.
  • Jangan mengkompilasi kode C# yang terletak di folder iOS , atau sub-folder folder iOS , jika Anda tidak membangun untuk iOS.
  • Jangan mengkompilasi kode C# yang terletak di folder MacCatalyst , atau sub-folder folder MacCatalyst , jika Anda tidak membangun untuk Mac Catalyst.
  • Jangan mengkompilasi kode C# yang terletak di folder Windows , atau sub-folder folder Windows , jika Anda tidak membangun untuk Windows.

Penting

Penargetan multi-berbasis folder dapat dikombinasikan dengan multi-penargetan berbasis nama file. Untuk informasi selengkapnya, lihat Menggabungkan nama file dan multi-penargetan folder.

Menggabungkan nama file dan multi-penargetan folder

Penargetan multi-nama file dapat dikombinasikan dengan multi-penargetan berbasis folder jika diperlukan. Sistem build dapat dikonfigurasi untuk menggunakan pola ini dengan menambahkan XML berikut ke file proyek aplikasi .NET MAUI (.csproj) Anda sebagai turunan dari <Project> simpul:

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

XML ini mengonfigurasi sistem build untuk menghapus nama file dan pola folder berbasis platform dalam kondisi tertentu:

  • Jangan mengkompilasi kode C# yang nama file-nya berakhir dengan . Android.cs, atau yang terletak di folder Android atau sub-folder folder Android , jika Anda tidak membangun untuk Android.
  • Jangan mengkompilasi kode C# yang nama file-nya berakhir dengan . MaciOS.cs, atau yang terletak di folder MaciOS atau sub-folder folder MaciOS , jika Anda tidak membangun untuk iOS dan Mac Catalyst.
  • Jangan mengkompilasi kode C# yang nama file-nya berakhiran dengan .iOS.cs, atau yang terletak di folder iOS atau sub-folder folder iOS , jika Anda tidak membangun untuk iOS.
  • Jangan mengkompilasi kode C# yang nama file-nya berakhir dengan . MacCatalyst.cs, atau yang terletak di folder MacCatalyst atau sub-folder folder MacCatalyst , jika Anda tidak membangun untuk Mac Catalyst.
  • Jangan mengkompilasi kode C# yang nama file-nya berakhir dengan . Windows.cs, atau yang terletak di folder Windows atau sub-folder folder Windows , jika Anda tidak membangun untuk Windows.