Udostępnij za pośrednictwem


Konfigurowanie wielowersyjność

Aplikacje wieloplatformowego interfejsu użytkownika aplikacji platformy .NET (.NET MAUI) używają wielowersyjności do określania celu wielu platform z jednego projektu.

Projekt dla aplikacji MAUI platformy .NET zawiera folder Platformy z każdym folderem podrzędnym reprezentującym platformę, którą może być docelowa platforma .NET MAUI:

Zrzut ekranu folderów platformy.

Foldery dla każdej platformy docelowej zawierają kod specyficzny dla platformy, który uruchamia aplikację na każdej platformie oraz dodatkowy kod platformy, który dodajesz. W czasie kompilacji system kompilacji zawiera tylko kod z każdego folderu podczas kompilowania dla tej konkretnej platformy. Na przykład podczas kompilowania dla systemu Android pliki w folderze Platformy>systemu Android zostaną wbudowane w pakiet aplikacji, ale pliki w innych folderach Platformy nie będą.

Oprócz tego domyślnego podejścia wielowersyjności aplikacje MAUI platformy .NET mogą być również wielowersyjne na podstawie własnych kryteriów nazwy pliku i folderu. Dzięki temu można strukturę projektu aplikacji .NET MAUI, aby nie trzeba było umieszczać kodu platformy w podfolderach folderu Platformy .

Konfigurowanie wielowersyjnych elementów docelowych opartych na nazwie pliku

Standardowy wzorzec wielowersyjny polega na dołączeniu platformy jako rozszerzenia w nazwie pliku dla kodu platformy. Na przykład plik MyService.Android.cs reprezentuje implementację MyService klasy specyficzną dla systemu Android. System kompilacji można skonfigurować do używania tego wzorca, dodając następujący kod XML do pliku aplikacji .NET MAUI (csproj) jako elementy podrzędne węzła <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>

Ten kod XML konfiguruje system kompilacji w celu usunięcia wzorców nazw plików opartych na platformie w określonych warunkach:

  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem . Android.cs, jeśli nie tworzysz aplikacji dla systemu Android.
  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem . MaciOS.cs, jeśli nie kompilujesz aplikacji dla systemów iOS i Mac Catalyst.
  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem .iOS.cs, jeśli nie kompilujesz dla systemu iOS.
  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem . MacCatalyst.cs, jeśli nie tworzysz dla komputerów Mac Catalyst.
  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem . Windows.cs, jeśli nie kompilujesz dla systemu Windows.

Ważne

Wielowersyjność oparta na nazwach plików może być łączona z wielowersyjnymi elementami docelowych opartymi na folderach. Aby uzyskać więcej informacji, zobacz Łączenie nazwy pliku i folderu wielowersyjność.

Konfigurowanie wielowersyjnych elementów docelowych opartych na folderach

Innym standardowym wzorcem wielowersyjnym jest dołączenie platformy jako nazwy folderu. Na przykład folder o nazwie Android będzie zawierać kod specyficzny dla systemu Android . System kompilacji można skonfigurować do używania tego wzorca, dodając następujący kod XML do pliku aplikacji .NET MAUI (csproj) jako elementy podrzędne węzła <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>

Ten kod XML konfiguruje system kompilacji w celu usunięcia wzorców folderów opartych na platformie w określonych warunkach:

  • Nie kompiluj kodu w języku C#, który znajduje się w folderze systemu Android ani w podfolderze folderu systemu Android , jeśli nie tworzysz dla systemu Android.
  • Nie kompiluj kodu w języku C#, który znajduje się w folderze MaciOS ani w podfolderze folderu maciOS , jeśli nie kompilujesz plików dla systemów iOS i Mac Catalyst.
  • Nie kompiluj kodu w języku C#, który znajduje się w folderze systemu iOS ani w podfolderze folderu systemu iOS , jeśli nie kompilujesz dla systemu iOS.
  • Nie kompiluj kodu c# znajdującego się w folderze MacCatalyst ani podfolderie folderu MacCatalyst , jeśli nie tworzysz narzędzia Mac Catalyst.
  • Nie kompiluj kodu c# znajdującego się w folderze systemu Windows ani podfolderie folderu systemu Windows , jeśli nie kompilujesz dla systemu Windows.

Ważne

Wielowersyjność oparta na folderach może być łączona z wielowersyjną obsługą nazw plików. Aby uzyskać więcej informacji, zobacz Łączenie nazwy pliku i folderu wielowersyjność.

Łączenie wielowersyjnej nazwy pliku i folderu

W razie potrzeby wielowersyjność oparta na nazwach plików może być łączona z wielowersyjnymi elementami docelowych opartymi na folderach. System kompilacji można skonfigurować do używania tego wzorca, dodając następujący kod XML do pliku aplikacji .NET MAUI (csproj) jako elementy podrzędne węzła <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>

Ten kod XML konfiguruje system kompilacji w celu usunięcia wzorców nazw plików i folderów opartych na platformie w określonych warunkach:

  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem . Android.cs lub znajduje się w folderze systemu Android lub w podfolderze folderu systemu Android , jeśli nie tworzysz dla systemu Android.
  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem . MaciOS.cs lub znajduje się w folderze maciOS lub podfolderie folderu MaciOS , jeśli nie tworzysz plików dla systemów iOS i Mac Catalyst.
  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem .iOS.cs lub znajduje się w folderze systemu iOS lub podfolderze folderu systemu iOS , jeśli nie tworzysz aplikacji dla systemu iOS.
  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem . MacCatalyst.cs lub znajduje się w folderze MacCatalyst lub podfolderie folderu MacCatalyst , jeśli nie tworzysz narzędzia Mac Catalyst.
  • Nie kompiluj kodu w języku C#, którego nazwa pliku kończy się ciągiem . Windows.cs lub znajduje się w folderze systemu Windows lub w podfolderze folderu systemu Windows , jeśli nie kompilujesz dla systemu Windows.