Dieser Blog zeigt wie einfach es ist ein NuGet Paket zu erstellen. Es wird erklärt wie man in 5 Minuten selber ein NuGet Paket erstellt und veröffentlicht. Die verschiedene Wege ein NuGet Paket zu hosten wird am Schluss erklärt.
Was ist NuGet?
- NuGet ist eine freie Open-Source-Paketverwaltung für die Softwareentwicklung unter .NET.
- Gibt es offiziell seit 2010 (Visual Studio 2010)
- Statt manuell DLLs in ein Projekt-\Solution-Verzeichnis zu kopieren, definiert man mit der NuGet Visual-Studio-Erweiterung die benötigte Binaries für die einzelnen Projekte.
- Abhängigkeiten zu anderen NuGet Paketen werden automatisch mit hineingezogen.
- Neuere Versionen können per Mausklick installiert werden.
- Mit NuGet wird verhindert, dass die DLLs in ein Source-Verwaltungsystem eingecheckt werden.
- Durch die packages.config Dateien die NuGet bei den Projekte speichert, kann man im Source-Verwaltungsystem den Verlauf der Versionen vergleichen.
- Für Client-seitige Paketen (z.B. JavaScript, CSS, usw.) gibt es etwas ähnliches genannt: ‚Bower‘
Wie funktioniert es?
Die NuGet Extension fügt in jedes Projekt welches ein NuGet Paket verwendet eine packages.config Datei hinzu. Dazu werden automatisch die Referenzen in der Projektdatei gesetzt.
Beim Kompilieren werden die NuGet Paketen heruntergeladen und extrahiert im packages-Verzeichnis (im root der Solution).
Das packages-Verzeichnis auf der gleichen Höhe wie die Solution-Datei:
Was ist ein NuGet-Paket genau?
Ein NuGet Package ist eine ZIP-Datei und enthält alle Inhalt um eine externe Bibliothek zu referenzieren:
- Metadaten die das Paket und die Abhängigkeiten beschreiben
- Eine oder mehrere DLLs
- Optional: Quellkode, Debugsymbolen, PowerShell-Skripts (Eher selten)
Die .nuspec Package Manifest Datei enthält die Beschreibung des Paketes und muss definiert werden wenn man selber ein NuGet Paket erstellt.
Wie erstellt man ein NuGet-Paket?
Zum Erstellen eines NuGet Paket gibt es 2 Wege:
- Manifest Datei (.nuspec) mit Daten aus .csproj Datei generieren lassen
- Manifest Datei (.nuspec) manuell definieren
Für das braucht es das Command Line Tool nuget.exe (pre-requisite).
Download nuget.exe von https://dist.nuget.org/index.html
Manifest Datei (.nuspec) mit Daten aus .csproj Datei generieren lassen
- Kopiere nuget.exe ins Verzeichnis der Projektdatei (.csproj).
- Öffne einen Command Prompt und navigiere zum Verzeichnis.
- Eingeben: ‚nuget spec‘
- Jetzt gibt es neu eine Vorlagedatei mit der Extension .nuspec
- Vorlage anpassen
- Eingeben: ‚nuget pack [name].csproj‘ um das Paket mit Daten aus der AssemblyInfo.cs zu erstellen
Die initiale .nuspec-Vorlage:
Die bearbeitete .nuspec-Datei nach Packaging ablauf:
Manifest Datei (.nuspec) manuell definieren
- Kopiere nuget.exe im Solution Verzeichnis.
- Öffne einen Command Prompt und navigiere zum Verzeichnis.
- Eingeben: ‚nuget spec‘
- Jetzt gibt es neu eine Vorlagedatei mit der Extension .nuspec
- Vorlage anpassen: DLL(s) und Referenzen manuell definieren.
- Eingeben: ‚nuget pack [name].nuspec‘ um das Paket zu generieren.
Die .nuspec-Datei manuell definiert:
.nuspec Manifest-Datei anpassen:
- Die $<var>$ sind Platzhalter und werden aus der AssemblyInfo.cs Datei geholt wenn das Paket erstellt wird.
- Die Platzhalter können auch mit Konstanten ersetzt werden.
- Mindestens vorhanden sein sollen: ‚id‘, ‚version‘, ‚authors‘ und ‚description‘.
- DLL(s) zum verpacken werden pro Zielframework in ‚files‘ definiert.
- Abhängigkeiten werden mit ‚dependecies‘ definiert.
- Schlüsselwörter werden in ‚tags‘ eingegeben.
- Nicht gebrauchte Werte löschen.
Wie Hostet man NuGet Pakete?
Zum hosten von den NuGet Päckli gibt es die folgende Möglichkeiten:
- Lokales Repository (auf Netzlaufwerk oder sogar lokal)
- NuGet Server
- NuGet Gallery
- Visual Team Services (Package Management Extension)
- Third-party Hosten
Hosting: NuGet Server
Das NuGet.Server Paket erstellt eine ASP.NET Applikation welche die NuGet Paketen über HTTP(S) zur Verfügung stellt.
Hosting: NuGet Gallery
Stellt die NuGet Pakete zur Verfügung auf einem Internet Server mit dem NuGet Gallery Projekt (GitHub) und ermöglicht z.B. Benutzerverwaltung. Über ein ausführliches Web UI kann der Benutzer die Pakete (unter-)suchen wie man sich das von nuget.org gewöhnt ist.
Hosting: lokales Repository
- Verzeichnis machen auf z.B. Netzwerk
- Pakete mit eventuelle PNG Dateien hineinkopieren
- NuGet.config von Visual Studio mit Repository erweitern (in Visual Studio)
- Repository Anwählen
- Der Rest ist wie bei allen anderen Repositories
NuGet Repository im Visual Studio definieren:
- Extras -> NuGet-Paket-Manager -> Settings neben Paketquelle
- Repository hinzufügen
- Neue Paketquelle anwählen
Sonstiges
Die heutige Version von NuGet hat nicht die Möglichkeit eine Ikondatei im NuGet-Paket zu embedden.
- PNG-Datei erstellen von 64×64
- Ins Repository kopieren
- Absoluter Pfad setzen in der [name].nuspec Datei