0Pricing
C# Academy · Lekcja

Obsługa wielu platform docelowych

Proszę budować jedną bibliotekę dla wielu platform docelowych z pojedynczego projektu, używać kompilacji warunkowej i zastępczych shimów dla różnic w API.

Obsługa wielu platform docelowych to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Koncepcja i korzyści

Cel: Dostarczać jeden pakiet działający na wielu platformach.

  • Pojedynczy projekt tworzy wiele plików binarnych
  • Odbiorcy automatycznie otrzymują najlepiej dopasowany zestaw
  • Stosuj małe bloki #if, gdy interfejsy API się różnią

Podstawy wyboru zasobów

  • Pakiet zawiera foldery dla poszczególnych platform docelowych (np. lib/net45, lib/netstandard2.0)
  • NuGet wybiera najbliższy zgodny zasób
  • Zachowaj spójny publiczny interfejs API; różnić powinien się tylko kod wewnętrzny

Przykład kompilacji warunkowej

Używaj małych bloków #if, aby zmieniać implementację. Zachowaj identyczną sygnaturę metody publicznej.

#define NET45   // simulate building for different targets
// #define NETSTANDARD2_0

using System;

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Target: " + TargetName());
  }

  // Public API: stays the same across targets
  public static string TargetName()
  {
#if NET45
    return "net45 build";
#elif NETSTANDARD2_0
    return "netstandard2.0 build";
#else
    return "unknown target";
#endif
  }
}

Stabilne API, wewnętrzne warstwy pośrednie

Zachowaj ten sam publiczny interfejs API; ukryj różnice za małymi warstwami pośrednimi, aby kod wywołujący nie musiał wiedzieć, która platforma docelowa jest używana.

#define NET45

using System;
using System.IO;

public class Program
{
  // Public API is stable; internal implementation differs.
  public static string ReadAllTextCompat(string path)
  {
#if NET45
    // net45 has File.ReadAllText; use it directly.
    return File.ReadAllText(path);
#else
    // Example shim path (for an older TF that lacks some helper API)
    using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
    using (var sr = new StreamReader(fs))
    {
      return sr.ReadToEnd();
    }
#endif
  }

  public static void Main(string[] args)
  {
    // For demo, write then read
    string p = "demo.txt";
    File.WriteAllText(p, "hello");
    Console.WriteLine(ReadAllTextCompat(p));
  }
}

Wskazówki dotyczące konfiguracji

  • Użyj w projekcie elementu TargetFrameworks (w liczbie mnogiej), aby wyświetlić platformy docelowe
  • Ogranicz #if do małych funkcji pomocniczych; większość kodu pozostaw wspólną
  • Testuj każdą platformę docelową; uruchamiaj testy jednostkowe dla każdego TFM
  • Publikuj jeden pakiet zawierający zasoby dla wszystkich platform docelowych

Typowe pułapki

  • Nie udostępniaj różnych publicznych interfejsów API dla poszczególnych platform docelowych
  • Unikaj głęboko zagnieżdżonych bloków #if; stosuj małe warstwy pośrednie
  • Zwracaj uwagę na niejawne różnice w działaniu (ścieżki, kodowania)
  • Dokumentuj wszelkie ograniczenia zależne od platformy docelowej

Dlaczego wiele platform docelowych

Szybkie sprawdzenie: jaka jest główna korzyść z obsługi wielu platform docelowych przez bibliotekę?

Podsumowanie

Podsumowanie: Obsługa wielu platform docelowych pozwala dostarczać kilka plików binarnych z jednego projektu. Zachowaj spójny publiczny interfejs API, ukryj różnice za małymi warstwami #if i umieść zasoby dla wszystkich platform w jednym pakiecie.

Często zadawane pytania

Czy lekcja „Obsługa wielu platform docelowych” jest bezpłatna?

Tak — pełny tekst „Obsługa wielu platform docelowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Obsługa wielu platform docelowych”?

Proszę budować jedną bibliotekę dla wielu platform docelowych z pojedynczego projektu, używać kompilacji warunkowej i zastępczych shimów dla różnic w API. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „Obsługa wielu platform docelowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Biblioteka a aplikacja .csproj i wersjonowanie semantyczne
  2. Pakowanie i publikowanie w NuGet
  3. Obsługa wielu platform docelowych
← Powrót do C# Academy