Visual Studio Projekt als lokale NuGet Paketquelle einbinden

Visual Studio Projekt als lokale NuGet Paketquelle einbinden

Visual Studio kann während des Buildvorgangs automatisch ein NuGet-Paket erstellen. Im Ordner bin/Debug entsteht so eine .nupkg Datei, die dem Name der Projektmappe entspricht. Diese lässt sich – sowohl manuell als auch automatisiert – bereitstellen. Wahlweise auf NuGet.org oder einer selbst gehosteten Registry. Hierfür kommt beispielsweise ProGet in Frage.

Für die finale Bereitstellung wird man sich zwischen diesen beiden Wegen entscheiden. Allerdings kann es zu Testzwecken hilfreich sein, ein solches NuGet-Paket komplett offline zu referenzieren. In der Ziel-Projektmappe, die also ein lokales NuGet-Paket referenzieren soll, legen wir dazu eine Datei namens nuget.config an:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <add key="MyLocalSharedSource" value="..\ULabs.VBulletinEntity\ULabs.VBulletinEntity\bin\Debug" />
    </packageSources>
</configuration>

Hier muss value durch den Pfad zum Ziel-Projekt ersetzt werden, in dem sich die .nupkg Datei befindet. Standardmäßig handelt es sich um den bereits erwähnten bin/Debug Ordner. Der Schlüssel dient als Bezeichner und kann frei gewählt werden.

Öffnet man nun die NuGet-Paketverwaltung, erscheint dieser Bezeichnet in der Paketquellen-Liste rechts oben:

Das paketierte Projekt erscheint nun unter „Durchsuchen“ und kann installiert werden.

Aktualisierungen

Möchte man das referenzierte Projekt jedoch aktualisieren, stellt sich dies als etwas nicht so einfach heraus. Der von NuGet vorgesehen Ablauf wäre das Erhöhen der Version im Quellprojekt sowie ein Update im Zielprojekt. Zu Testzwecken funktioniert dies jedoch auch einfacher:

dotnet build ../../ULabs.VBulletinEntity/ULabs.VBulletinEntity/ULabs.VBulletinEntity.csproj
rmdir /Q /S %userprofile%\.nuget\packages\ulabs.vbulletinentity
dotnet restore

Das Zielprojekt wird neu gebaut, wodurch auch ein neues NuGet-Paket entsteht. Anschließend muss der Cache gelöscht werden. Ansonsten greift das Update aufgrund der identischen Versionsnummer nicht. Schlussendlich wird das aktualisierte Paket durch den Restore im Zielprojekt neu geladen.

Leave a Reply