Modulare Softwareentwicklung bezeichnet das Auftrennen eines Softwareprojekts in einzelne, logisch voneinander getrennte Komponenten. Diese Modularität führt dazu, dass die einzeln vorliegenden Softwarekomponenten getrennt voneinander entwickelt und dann (wieder-)verwendet werden können. Wie bereits in dem Blog-Beitrag zum Unit-Testing erwähnt, hat dies den großen Vorteil, dass die einzelnen Module getrennt voneinander getestet werden können. Softwareentwickler können bereits fertiggestellte Komponenten verwenden, ohne sie (teilweise) neu zu entwickeln.
In diesem Blogbeitrag soll darauf eingegangen werden, wie Softwarepakete erstellt und bereitgestellt werden.
Eine der verbreitetsten Möglichkeiten dies für die .NET Softwareentwicklung zu realisieren, ist das Softwarepaket-Verwaltungssystem NuGet. NuGet ist ein kostenloses, von Microsoft entwickeltes System, das es ermöglicht, aus Datenquellen (den sog. Repositorys) Softwarepakete zu beziehen und einzubinden.
NuGet-Pakete entsprechen .ZIP-Dateien, deren Inhalt einem bestimmten Format entspricht. In der .NET Softwareentwicklung handelt es sich dabei meist um .DLL-Dateien und einige wenige Metadaten (Autoren, Beschreibungen, etc.) sowie Relationen zu anderen NuGet Paketen, welche automatisch aufgelöst werden, falls diese bestehen. Diese Dateien können durch die direkte Unterstützung von Visual Studio komfortabel in Projekte eingebunden, versioniert und verwendet werden.
Im Folgenden wird am Beispiel Visual Studio 2017 innerhalb eines .NET-Projekts dargestellt, wie sich ein NuGet-Paket einbauen lässt.
Dies beschreibt den gesamten Ablauf, den ein Benutzer durchlaufen muss, um neue NuGet-Pakete zu verwenden. Wenn wir nun aber selber NuGet-Pakete bereitstellen wollen, um diese mit der Welt (oder nur den Kollegen) zu teilen, müssen diese von uns erstellt und dann über öffentliche oder private Quellen bereitgestellt werden.
Um NuGet Pakete zu erstellen ist es nötig, sich den NuGet Package Manager herunterzuladen. Auf “https://www.nuget.org/downloads“ befinden sich Download-Links für die nuget.exe. Diese muss auf dem Rechner abgelegt und in der Umgebungsvariable “Path“- das Verzeichnis, in welchem die Datei abgelegt wird, eingetragen werden.
Um ein NuGet Paket zu erstellen, ist eine .nuspec-Datei (NuGet Specifications) notwendig. Diese enthält Metadaten und weitere Informationen zu Dateien des Pakets. Neben Informationen zum Titel, zum Autor, Copyright usw. werden dort auch weitere Abhängigkeiten und zu verwendende Dateien aufgelistet. Um eine .nuspec-Datei zu erzeugen, kann per Kommandozeile in das Verzeichnis des Projekts (.vbproj, .csproj) navigiert werden und der Befehl “nuget spec“ ausgeführt werden. Alternativ lässt sich dies mit dem selben Befehl über die “Package Manager Console“ realisieren, welche in Visual Studio 2017 integriert ist. Diesen Befehl erstellt nun eine .nuspec-Datei, welche den selben Namen trägt wie das Projekt.
Ein Beispiel für eine leicht angepasste .nuspec-Datei sieht so aus:
<?xml version=”1.0″? >
<package>
<metadata>
<id> $id$ </id>>
<version> $version$ </version>
<title> $title$ </title>
<authors> $author$ </authors>
<owners> $author$ </owners>
<requireLicenseAcceptance> false </requireLicenseAcceptance>
<description> $description$ </description>
<releaseNotes> $releaseNotes$ </releaseNotes>
<copyright> Copyright 2018 </copyright>
<tags> SWMS </tags>
</metadata>
</package>
Die $-Zeichen weisen darauf hin, dass es sich um Variablen handelt, welche im weiteren Verlauf zum Teil automatisch ersetzt werden.
Mit dem Befehl “nuget pack DateiName.vbproj“ wird aus dem gewählten VB-Projekt ein NuGet-Paket erzeugt, indem die vorher erstellte .nuspec Datei herangezogen wird. Für C#-Projekte gilt die Dateiendung “csproj“. Der Befehl “nuget pack“ ersetzt dabei bestimmte Platzhalter (zB <title>$title$</title>) automatisch durch Informationen des jeweiligen Projekts. Alternativ kann der “nuget pack“-Befehl auch direkt auf die .nuspec Datei angewendet werden. Das Ersetzen der Platzhalter wird dann jedoch nicht automatisch stattfinden. Weiterhin kann es sein, dass die jeweiligen .dll Dateien, welche sich zum Beispiel unter “\bin\Release\“ befinden, nicht gefunden werden. Diese müssen manuell in der .nuspec-Datei ergänzt werden.
Das Bereitstellen von Paketen kann auf mehrere Arten realisiert werden. Es ist zum Beispiel möglich, die NuGet Pakete in einen Ordner im lokalen Netzwerk abzulegen und diesen als Quelle für das Beziehen von Paketen zu definieren. Weiterhin ist es möglich, beispielsweise direkt auf die “nuget.org“ Datenquelle hochzuladen, in dem dort unter “Upload“ das NuGet Paket hochgeladen wird. Dort hochgeladene Pakete stehen dann jedoch jedem anderen Entwickler zur Verfügung, da sie öffentlich zugänglich sind.
Für die interne Verwendung ist es möglich, sich private Server für die Bereitstellung einzurichten.
Eine sehr komfortable Möglichkeit, NuGet Pakete nur einigen wenigen bereitzustellen, sind die Visual Studio Team Services (VSTS). Dort lassen sich sehr leicht sogenannte Feeds einrichten, welche als NuGet-Quellen verwendet werden können. In naher Zukunft wird es an dieser Stelle ein Update geben, welches die Voraussetzungen und die Umsetzung mittels VSTS erörtern wird.
NuGet-Pakete sind eine sehr komfortable und effiziente Möglichkeit, Softwarebausteine zu verwalten und untereinander auszutauschen.
Dieser Blogbeitrag sollte als kurze Heranführung an die Softwareentwicklung mit NuGet dienen. Es wurde der Verwendungszweck dargestellt und wie man NuGet Pakete verwendet, erstellt und veröffentlicht.
Viel Erfolg bei euren Projekten!
Titelbildnachweis: https://upload.wikimedia.org/wikipedia/commons/2/25/NuGet_project_logo.svg
Christopher Seidel
Was denkst du?