Modulare Softwareentwicklung mit NuGet

Modulare Softwareentwicklung mit NuGet

Was macht modulare Softwareentwicklung aus?

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.

 

Was sind NuGet-Pakete?

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.

Wie verwende ich NuGet-Pakete?

Im Folgenden wird am Beispiel Visual Studio 2017 innerhalb eines .NET-Projekts dargestellt, wie sich ein NuGet-Paket einbauen lässt.

  1. Verschiedene Bezugsquellen für Pakete lassen sich unter Tools -> Options -> NuGet Package Manager -> Package Sources hinzufügen. Die Standard-Bezugsquelle beispielsweise lautet “https://api.nuget.org/v3/index.json“ und führt zu einer Auflistung von Paketen von nuget.org, eine der größten Repositorys.
  2. Als Quellen für NuGet-Pakete können URLs oder Ordner verwendet werden. So können beispielsweise Netz-Laufwerke verwendet werden, um im lokalen Netzwerk Pakete bereitzustellen.
  3. In dem jeweiligen Projekt können nun über Projekt -> Manage NuGet Packages -> Browse -> Install NuGet Packages… Pakete aus den jeweiligen Quellen hinzugefügt werden.
  4. Im Programmcode des Projekts kann nun auf die neuen Daten verwiesen werden.

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.

Wie erstelle ich NuGet-Pakete?

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.

 

Erstellung von NuGet Paketen

 

Die .nuspec Datei

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.

 

Die .nupkg Datei

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.

Wie stelle ich NuGet-Pakete bereit?

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.

 

Fazit

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

-->