Übersicht über die Freigabe von Code

In diesem Dokument werden die verschiedenen Methoden zum Freigeben von Code zwischen plattformübergreifenden Projekten verglichen: .NET Standard, Freigegebene Projekte und portable Klassenbibliotheken, einschließlich der Vor- und Nachteile der einzelnen Projekte.

Es gibt drei Methoden für die gemeinsame Nutzung von Code zwischen plattformübergreifenden Anwendungen:

  • .NET Standard-Bibliotheken – .NET Standard-Projekte können Code implementieren, der plattformübergreifend freigegeben werden soll, und auf eine große Anzahl von .NET-APIs zugreifen (abhängig von der Version). In .NET Standard 1.0 bis 1.6 werden immer größere APIs implementiert, während .NET Standard 2.0 die beste Abdeckung der .NET-BCL bietet (einschließlich der in Xamarin-Apps verfügbaren .NET-APIs).
  • Freigegebene Projekte : Verwenden Sie den Typ Shared Asset Project, um Ihren Quellcode zu organisieren, und verwenden Sie #if compilerdirektiven, wie erforderlich, um plattformspezifische Anforderungen zu verwalten.
  • Portable Klassenbibliotheken (veraltet): Portable Klassenbibliotheken (PCLs) können auf mehrere Plattformen mit einer gemeinsamen API-Oberfläche abzielen und Schnittstellen verwenden, um plattformspezifische Funktionen bereitzustellen. PCLs sind in den neuesten Versionen von Visual Studio veraltet– verwenden Sie stattdessen .NET Standard.

Das Ziel einer Codefreigabestrategie besteht darin, die in diesem Diagramm gezeigte Architektur zu unterstützen, bei der eine einzelne Codebasis von mehreren Plattformen verwendet werden kann.

Anwendungsarchitektur für gemeinsam genutzten Code

In diesem Artikel werden die verfügbaren Methoden verglichen, damit Sie den richtigen Projekttyp für Ihre Anwendungen auswählen können.

.NET Standardbibliotheken

.NET Standard-Bibliotheken stellen einen klar definierten Satz der Basisklassenbibliotheken bereit, auf die in verschiedenen Projekttypen verwiesen werden kann, einschließlich plattformübergreifender Projekte wie Xamarin.Android und Xamarin.iOS. .NET Standard 2.0 wird für maximale Kompatibilität mit vorhandenem .NET Framework Code empfohlen.

.NET Standard-Diagramm.NET

Vorteile

  • Ermöglicht ihnen, Code über mehrere Projekte hinweg zu teilen.
  • Refactoringvorgänge aktualisieren immer alle betroffenen Verweise.
  • Eine größere Oberfläche der .NET-Basisklassenbibliothek (BCL) ist verfügbar als PCL-Profile. Insbesondere .NET Standard 2.0 verfügt fast über die gleiche API-Oberfläche wie die .NET Framework und wird für neue Apps und das Portieren vorhandener PCLs empfohlen.

Nachteile

  • Compilerdirektiven wie können nicht verwendet werden #if __IOS__.

Hinweise

.NET Standard ähnelt PCL, verfügt jedoch über ein einfacheres Modell für die Plattformunterstützung und eine größere Anzahl von Klassen aus der BCL.

Freigegebene Projekte

Freigegebene Projekte enthalten Codedateien und Ressourcen, die in jedem Projekt enthalten sind, das darauf verweist. Freigabeprojekte erzeugen keine kompilierte Ausgabe selbst.

Dieser Screenshot zeigt eine Projektmappendatei, die drei Anwendungsprojekte (für Android, iOS und Windows) mit einem freigegebenen Projekt enthält, das allgemeine C#-Quellcodedateien enthält:

Freigegebene Projektmappe

Die konzeptionelle Architektur ist im folgenden Diagramm dargestellt, in dem jedes Projekt alle freigegebenen Quelldateien enthält:

Diagramm

Beispiel

Eine plattformübergreifende Anwendung, die iOS, Android und Windows unterstützt, würde ein Anwendungsprojekt für jede Plattform erfordern. Der allgemeine Code befindet sich im freigegebenen Projekt.

Eine Beispiellösung würde die folgenden Ordner und Projekte enthalten (Projektnamen wurden aus Ausdrucksgründen ausgewählt, Ihre Projekte müssen diesen Benennungsrichtlinien nicht entsprechen):

  • Freigegeben : Freigegebenes Projekt, das den code enthält, der allen Projekten gemeinsam ist.
  • AppAndroid – Xamarin.Android-Anwendungsprojekt.
  • AppiOS – Xamarin.iOS-Anwendungsprojekt.
  • AppWindows – Windows-Anwendungsprojekt.

Auf diese Weise verwenden die drei Anwendungsprojekte denselben Quellcode (die C#-Dateien in Shared). Alle Bearbeitungen am freigegebenen Code werden für alle drei Projekte freigegeben.

Vorteile

  • Ermöglicht ihnen, Code über mehrere Projekte hinweg zu teilen.
  • Freigegebener Code kann basierend auf der Plattform mithilfe von Compilerdirektiven verzweigt werden (z. B. mit #if __ANDROID__ , wie im Dokument Erstellen plattformübergreifender Anwendungen erläutert).
  • Anwendungsprojekte können plattformspezifische Verweise enthalten, die der freigegebene Code verwenden kann (z. B. die Verwendung Community.CsharpSqlite.WP7 im Tasky-Beispiel für Windows Phone).

Nachteile

  • Refactorings, die sich auf Code innerhalb von "inaktiven" Compilerdirektiven auswirken, aktualisieren den Code innerhalb dieser Direktiven nicht.
  • Im Gegensatz zu den meisten anderen Projekttypen verfügt ein freigegebenes Projekt über keine Ausgabeassembly. Während der Kompilierung werden die Dateien als Teil des verweisenden Projekts behandelt und in diese Assembly kompiliert. Wenn Sie Ihren Code als Assembly freigeben möchten, sind .NET Standard- oder Portable Klassenbibliotheken eine bessere Lösung.

Hinweise

Eine gute Lösung für Anwendungsentwickler, die Code schreiben, der nur für die Freigabe in ihrer App (und nicht für die Verteilung an andere Entwickler) vorgesehen ist.

Portable Klassenbibliotheken

Tipp

.NET Standard 2.0-Bibliotheken werden gegenüber portablen Klassenbibliotheken empfohlen.

Portable Klassenbibliotheken werden hier ausführlich erläutert.

Diagramm der portablen Klassenbibliothek

Vorteile

  • Ermöglicht ihnen, Code über mehrere Projekte hinweg zu teilen.
  • Refactoringvorgänge aktualisieren immer alle betroffenen Verweise.

Nachteile

  • In den neuesten Versionen von Visual Studio veraltet, werden stattdessen .NET Standard-Bibliotheken empfohlen. Lesen Sie diese Erläuterung der Unterschiede zwischen PCL und .NET Standard.
  • Compilerdirektiven können nicht verwendet werden.
  • Es steht nur eine Teilmenge von .NET Framework zur Verwendung zur Verfügung, die durch das ausgewählte Profil bestimmt wird (weitere Informationen finden Sie unter Einführung in PCL ).

Hinweise

Die PCL-Vorlage gilt in den neuesten Versionen von Visual Studio als veraltet.

Zusammenfassung

Die von Ihnen gewählte Codefreigabestrategie wird von den Plattformen gesteuert, auf die Sie abzielen. Wählen Sie eine Methode aus, die für Ihr Projekt am besten geeignet ist.

.NET Standard ist die beste Wahl zum Erstellen von einheitlichen Codebibliotheken (insbesondere zum Veröffentlichen auf NuGet). Freigegebene Projekte eignen sich gut für Anwendungsentwickler, die viele plattformspezifische Funktionen in ihren plattformübergreifenden Apps verwenden möchten.

Während PCL-Projekte in Visual Studio weiterhin unterstützt werden, wird .NET Standard für neue Projekte empfohlen.