Freigeben über


Manuelles Erstellen von NuGet-Paketen für Xamarin

Diese Seite enthält einige Tipps zum Erstellen von NuGet-Paketen, die auf die Xamarin-Plattform abzielen.

Hinweis

Xamarin Studio 6.2 (und Visual Studio für Mac) umfasst die Möglichkeit, NuGet-Pakete automatisch aus PCL-, .NET-Standard- oder freigegebenen Projekten zu generieren. Weitere Informationen finden Sie im Multiplatform Libraries for Code Sharing Guide.

NuGet-Paket-Xamarin-Profile

Die Unterstützung mehrerer .NET Framework-Versionen und -Profile der NuGet-Website erläutert, wie verschiedene Microsoft Frameworks und Profile unterstützt werden, aber nicht die von Xamarin verwendeten Zielframeworknamen enthalten.

Die derzeit verwendeten Standard Xamarin-Zielframeworks sind:

  • MonoAndroid - Xamarin.Android
  • Xamarin.iOS – Xamarin.iOS Unified API (unterstützt 64-Bit)
  • Xamarin.Mac – Xamarin.Macs mobiles Profil, das der Oberfläche der Xamarin.iOS- und Xamarin.Android-API entspricht.

Es gibt auch ein Ziel für die ältere iOS Classic API:

  • MonoTouch – klassische iOS-API

Eine NUSPEC-Datei , die auf all diese Ziele ausgerichtet ist, würde etwa wie folgt aussehen:

<files>
    <file src="Mac\bin\Release\*.dll" target="lib\Xamarin.Mac20" />
    <file src="iOS\bin\Release\*.dll" target="lib\Xamarin.iOS10" />
    <file src="Android\bin\Release\*.dll" target="lib\MonoAndroid10" />
    <file src="iOSClassic\bin\Release\*.dll" target="lib\MonoTouch10" />
</files>

Im obigen Fall werden alle portablen Klassenbibliotheken ignoriert.

Die meisten NUSPEC-Dateien geben die Versionsnummer des Zielframeworks an, ist aber optional, wenn Ihre Assembly mit allen Versionen dieses Zielframeworks funktioniert. Wenn Ihr Ziel lib\MonoAndroid war, bedeutet dies, dass es mit jeder Version von Xamarin.Android funktioniert.

Sie können die Version mit einer Reihe von Zahlen ohne Dezimalkomma angeben oder mithilfe von Dezimalkomma angeben. Ohne den Dezimalkommapunkt nimmt NuGet nur jede Zahl und wandelt sie in eine Version um, indem zwischen jeder Ziffer ein "." eingefügt wird.

Im obigen "MonoAndroid10" bedeutet "Android 1.0". Dies bedeutet nur, dass das Zielframework des Projekts MonoAndroid, Version 1.0 oder höher, sein muss. Die Version wird im <TargetFrameworkVersion> Element in der Projektdatei angegeben.

Zur Verdeutlichung:

  • MonoAndroid403 entspricht Android 4.0.3 und höher (ie API-Ebene 15)
  • Xamarin.iOS10 entspricht Xamarin.iOS 1.0 und höher
  • Xamarin.iOS1.0 entspricht auch Xamarin.iOS 1.0 und höher

PCL NuGets mit Plattformabhängigkeiten

PCL-Profile sind in den .NET Framework-APIs beschränkt, auf die sie zugreifen können, und sie können sicherlich nicht auf plattformspezifischen Code zugreifen. Diese Links von Drittanbietern befassen sich mit verschiedenen Ansätzen zum Erstellen von NuGet-Paketen, die PCL und systemeigene APIs verwenden, um Kompatibilität für Xamarin und andere Plattformen bereitzustellen:

Diese externe Liste von PCL-Profilen mit ihrem NuGet-Zielnamen ist auch ein nützlicher Verweis.

Beispiele

Einige Open-Source-Beispiele, auf die Sie verweisen können:

  • ModernHttpClient – Schreiben Sie Ihre App mit System.Net.Http, legen Sie diese Bibliothek jedoch ab, und es wird drastisch schneller (Ansichtsquelle) gehen.
  • Splat – Eine Bibliothek, mit der Elemente plattformübergreifend dargestellt werden sollen (Ansichtsquelle).
  • NGraphics – Eine plattformübergreifende Bibliothek zum Rendern von Vektorgrafiken in .NET (Ansichtsquelle).