Çoklu hedeflemeyi yapılandırma

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) uygulamaları, tek bir projeden birden çok platformu hedeflemek için çoklu hedefleme kullanır.

.NET MAUI uygulaması projesi, .NET MAUI'nin hedefleyebilecekleri bir platformu temsil eden her alt klasörün bulunduğu bir Platformlar klasörü içerir:

Platform klasörleri ekran görüntüsü.

Her hedef platformun klasörleri, uygulamayı her platformda başlatan platforma özgü kodun yanı sıra eklediğiniz tüm ek platform kodlarını içerir. Derleme zamanında, derleme sistemi yalnızca belirli bir platform için derleme yaparken her klasörden kodu içerir. Örneğin, Android için derleme yaptığınızda , Platformlar>Android klasöründeki dosyalar uygulama paketinde yerleşik olarak bulunur, ancak diğer Platformlar klasörlerindeki dosyalar oluşturulmaz.

Bu varsayılan çoklu hedefleme yaklaşımına ek olarak, .NET MAUI uygulamaları kendi dosya adınıza ve klasör ölçütlerinize göre de çok hedefli olabilir. Bu, platform kodunuzu Platformlar klasörünün alt klasörlerine yerleştirmeniz gerekmeyecek şekilde .NET MAUI uygulama projenizi yapılandırmanızı sağlar.

Dosya adı tabanlı çoklu hedeflemeyi yapılandırma

Standart bir çoklu hedefleme düzeni, platform kodunun dosya adına bir uzantı olarak platformu dahil etmektir. Örneğin , MyService.Android.cs sınıfının Android'e özgü bir uygulamasını MyService temsil eder. Derleme sistemi, .NET MAUI uygulama proje (.csproj) dosyanıza düğümün <Project> alt öğeleri olarak aşağıdaki XML eklenerek bu düzeni kullanacak şekilde yapılandırılabilir:

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

Bu XML, derleme sistemini belirli koşullar altında platform tabanlı dosya adı desenlerini kaldıracak şekilde yapılandırmaktadır:

  • Dosya adı ile biten C# kodunu derlemeyin . Android için oluşturmuyorsanız Android.cs.
  • Dosya adı ile biten C# kodunu derlemeyin . iOS ve Mac Catalyst için oluşturmuyorsanız MaciOS.cs.
  • iOS için oluşturmuyorsanız dosya adı .iOS.cs ile biten C# kodunu derlemeyin.
  • Dosya adı ile biten C# kodunu derlemeyin . Mac Catalyst için oluşturmuyorsanız MacCatalyst.cs.
  • Dosya adı ile biten C# kodunu derlemeyin . Windows için oluşturmuyorsanız Windows.cs.

Önemli

Dosya adı tabanlı çoklu hedefleme, klasör tabanlı çoklu hedefleme ile birleştirilebilir. Daha fazla bilgi için bkz. Dosya adı ve klasör çoklu hedeflemesini birleştirme.

Klasör tabanlı çoklu hedeflemeyi yapılandırma

Bir diğer standart çoklu hedefleme düzeni de platformu klasör adı olarak eklemektir. Örneğin, Android adlı bir klasör Android'e özgü kod içerebilir. Derleme sistemi, .NET MAUI uygulama proje (.csproj) dosyanıza düğümün <Project> alt öğeleri olarak aşağıdaki XML eklenerek bu düzeni kullanacak şekilde yapılandırılabilir:

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

Bu XML, derleme sistemini belirli koşullar altında platform tabanlı klasör desenlerini kaldıracak şekilde yapılandırmaktadır:

  • Android için oluşturmuyorsanız Android klasöründe veya Android klasörünün alt klasöründe bulunan C# kodunu derlemeyin.
  • iOS ve Mac Catalyst için oluşturmuyorsanız MaciOS klasöründe veya MaciOS klasörünün alt klasöründe bulunan C# kodunu derlemeyin.
  • iOS için oluşturmuyorsanız , iOS klasöründe veya iOS klasörünün alt klasöründe bulunan C# kodunu derlemeyin.
  • Mac Catalyst için oluşturmuyorsanız MacCatalyst klasöründe veya MacCatalyst klasörünün alt klasöründe bulunan C# kodunu derlemeyin.
  • Windows için oluşturmuyorsanız , Windows klasöründe veya Windows klasörünün alt klasöründe bulunan C# kodunu derlemeyin.

Önemli

Klasör tabanlı çoklu hedefleme, dosya adı tabanlı çoklu hedefleme ile birleştirilebilir. Daha fazla bilgi için bkz. Dosya adı ve klasör çoklu hedeflemesini birleştirme.

Dosya adı ve klasör çoklu hedeflemesini birleştirme

Dosya adı tabanlı çoklu hedefleme, gerekirse klasör tabanlı çoklu hedefleme ile birleştirilebilir. Derleme sistemi, .NET MAUI uygulama proje (.csproj) dosyanıza düğümün <Project> alt öğeleri olarak aşağıdaki XML eklenerek bu düzeni kullanacak şekilde yapılandırılabilir:

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

Bu XML, derleme sistemini belirli koşullar altında platform tabanlı dosya adı ve klasör desenlerini kaldıracak şekilde yapılandırmaktadır:

  • Dosya adı ile biten C# kodunu derlemeyin. Android için oluşturmuyorsanız Android.cs veya Android klasörünün Android klasöründe veya alt klasöründe bulunur.
  • Dosya adı ile biten C# kodunu derlemeyin . iOS ve Mac Catalyst için oluşturmuyorsanız MaciOS.cs veya MaciOS klasörünün MaciOS klasöründe veya alt klasöründe bulunur.
  • iOS için oluşturmuyorsanız, dosya adı .iOS.cs ile biten veya iOS klasörünün iOS klasöründe veya alt klasöründe bulunan C# kodunu derlemeyin.
  • Dosya adı ile biten C# kodunu derlemeyin . Mac Catalyst için oluşturmuyorsanız MacCatalyst.cs veya MacCatalyst klasörünün MacCatalyst klasöründe veya alt klasöründe bulunur.
  • Dosya adı ile biten C# kodunu derlemeyin. Windows için oluşturmuyorsanız, Windows.cs veya Windows klasörünün Windows klasöründe veya alt klasöründe bulunur.