Wir haben in anderen Artikeln bereits über NuGet gesprochen. Dieser Artikel stellt NuGet etwas genauer vor und erklärt, wie wir eigene Pakete erstellen und diese auf NuGet hochladen.

Was ist NuGet?

NuGet[1] ist prinzipiell ein Verzeichnis für Code-Bibliotheken. Nuget stellt nur Bibliotheken im .NET-Umfeld bereit. Darunter fallen beispielsweise das .NET Framework, .NET Core, Xamarin und Mono. Mit dieser Bibliothek können Pakete inklusive Abhängigkeiten sehr einfach Verwaltet und in einem Projekt installiert werden.

Das Visual Studio bietet eine Oberfläche zur Verwaltung an. Ansonsten kann per Install-Package [NAME] (Kommandozeile) ein beliebiges Paket zu einem Projekt hinzugefügt werden.

Die Projekte sind im Funktionsumfang nur auf die Zielplattform beschränkt. Im vorherigen Artikel haben wir besprochen, wie wir ein Projekt multiplattformfähig machen können. Eine höhere Portabilität erhöht den möglichen Erfolg einer Bibliothek.

Im Grunde erlaubt Nuget das dynamische Einbinden von dritthersteller Bibliotheken, um die eigene Anwendung zu erweitern.

Welche Vorteile bietet NuGet?

NuGet ist seit einigen Jahren als Paketmanager im Visual Studio integriert. Sehr viele bekannte Projekte stellen auf Nuget ihre Bibliotheken bereit. Der größte Vorteil besteht in der Verwaltung von externen Bibliotheken. In der Anwendung müssen keine DLLs oder Ordnerstrukturen gespeichert werden.

Statt dessen speichert das Projekt nur der Namen der Bibliothek und die Version. Beim Kompilieren wird die Bibliothek (falls sie fehlt) automatisch heruntergeladen. Damit kann das Projekt unanbhängig vom aktuellen Entwickler auch von anderen Personen kompiliert werden. Das lästige Kopieren und verschieben von DLLs entfällt.

Manchmal ist es notwendig, den Download zu forcieren. Allerdings ist der generelle Aufwand sehr überschaubar.

Hinweis: Bei .NET-Core Projekten verwendet NuGet einen globalen Cache des aktuellen Benutzers. Bei älteren .NET-Framework Projekten werden die Bibliotheken im Ordner der Solution (.sln) gespeichert. Zukünftig werden Bibliotheken daher nur noch 1x pro Version anstatt pro Projekt heruntergeladen.

Vorbereitung

Um ein Nuget-Paket zu erzeugen brauchen wir ein .NET-Projekt. In der Regel ist dies ein Projekt vom Typ „Bibliothek“. Derzeit kommt es noch zu unterschieden zwischen .NET Framework und .NET Core/Standard Projekten.

Ein NuGet-Paket erzeugen

Ein NuGet-Paket kann auf verschiedene Arten erzeugt werden:

  • Aufruf via Kommandozeile (alle Projekte)
  • Paketerstellung in Projekteigenschaften aktivieren (.NET Core/Standard)

Kommandozeile

Wir navigieren mit der Kommandozeile in das Verzeichnis, in welchem die csproj-Datei liegt. Dort rufen wir nuget spec auf. Dadurch erstellt Nuget eine Nuspec-Datei im aktuellen Verzeichnis. Diese Datei enthält die Spezifikation des Paketes. Der Inhalt sieht in etwas folgendermaßen aus:



  
    $id
    $version
    $title
    $author
    $author
    false
    $description
    Summary of changes made in this release of the package.
    Copyright 2018
    Tag1 Tag2
  

Die Nuspec-Datei hat den selben Namen wie das Projekt. Variablen wie $id$ liest NuGet aus den Assemblyinformationen aus. Hier können auch feste Werte vergeben werden.

Zum Erstellen eines Paketes müssen wir einen Autor und eine kurze Beschreibung angeben. Ansonsten schlägt das Paketieren fehl. Die Fehlermeldung gibt recht genau an, welche Informationen falsch sind oder fehlen.

Es kann vorkommen, dass ihr folgende Meldung erhaltet:
Das Objekt des Typs "System.String" kann nicht in Typ "NuGet.Frameworks.NuGet.Frameworks1069249.NuGetFramework" umgewandelt werden.

Der Fehler lässt sich recht einfach beheben:

  • Verwendet nuget pack nur bei .NET Framework Projekten (Core/Standard werden noch nicht unterstützt)
  • Verwendet msbuild /t:pack

Anschließend seht ihr im Verzeichnis eine Datei wie ClassLibrary1.1.0.0.nupkg. Dieses Paket könnt ihr mit einem ZIP-Programm öffnen und euch die ClassLibrary1.nuspec ansehen:



  
    ClassLibrary1
    1.0.0
    ClassLibrary1
    John Doe
    John Doe
    false
    Das große John Doe package
    First creation
    
  

Wie ihr sehen könnt wurden die Platzhalter durch die Werte aus der Assembly ersetzt. Aus diesem Paket kann NuGet nun die Informationen wie Paketnamen, Autor oder die Version extrahieren.

Projekteigenschaften

Hinweis: Diese Einstellung ist derzeit nur für Projekte mit .NET Core oder Standard verfügbar.

Das erstellen von NuGet-Paketen ist hier stark vereinfacht worden. In den Paketeinstellungen muss nur ein Häkchen gesetzt werden, damit beim Kompilieren automatisch ein Nuget-Paket erzeugt wird.

Projekteinstellungen, um ein NuGet-Paket zu erstellen

Mit den darunter liegenden Textfeldern können die diversen Felder ausgefüllt werden. Somit ist eine nuspec-Datei nicht mehr explizit notwendig. In diesen Textfeldern können die gleichen Platzhalter eingegeben werden wie in der vorherigen Nuspec-Datei.

Fazit und Ausblick

Mit den neuen Projekteinstellungen ist das Erstellen von Paketen relativ einfach. Durch die Nuget-Kommandozeile kann ein Paket ebenfalls schnell erzeugt werden.

Im nächsten Artikel sehen wir uns an, wie wir diese Pakete auf Nuget bereitstellen.


Bildquelle: Pixabay.com

[1]: https://www.nuget.org/
Microsoft Docs zur Paketserstellung: MSDN Paket erzeugen

2019-07-17: Fehlerhafte Formatierung korrigiert