Nuget und der TFS

Ich liebe Nuget mittlerweile. Was mich aber echt genervt hat, war die Art und Weise, wie Nuget im Standard mit dem TFS zusammen arbeitet. Besser gesagt: Wie es nicht mit ihm zusammen arbeitet. Wie so oft, ist die Lösung allerdings wieder so einfach, dass es einen echt umhaut!

Das Problem

Man erstellt ein neues Teamprojekt, fügt seine Solution hinzu und macht sich daran, den Code zu schreiben. Nuget ist hierbei eine Glaubensfrage und ich bekenne mich schuldig. Also die Konsole auf (ein wenig Nostalgie soll schon sein und man erntet Respekt, wenn die Konfig-Meldungen durchlaufen :-)) und ein herzhaftes „install-package NLog“ eingehämmert.

Nachdem das alles auf der lokalen Maschine funktioniert hat, wird fröhlich eingecheckt. Am nächsten Tag begibt man sich an einen anderen Rechner, holt die letzte Version und ist erstmal beruhigt, weil die packages.config schön im Ordner aufgelistet werden. Ein Druck auf F5 belehrt einen aber dann, dass doch nicht alles so reibungslos abgegangen ist. Plötzlich meckert VS, dass NLog nicht da wäre und tatsächlich: öffnet man den Verweis-Baum, ist da ein gelbes Ausrufezeichen am NLog dran.

Die Lösung

Es gibt hier viele Wege. Z.B. gibt es ein relativ junges codeplex-Projekt Nuget4TFS, das sich des Problems auf TFS-Server-Seite annehmen möchte. Ich glaube, die Jungs müssen noch ein wenig arbeiten und außerdem habe ich immer ein wenig Hemmungen, meinen TFS einfach mal eben so umzukonfigurieren. Das kann lästig und aufwendig werden.

In meiner Verzweiflung klicke ich also so im VS herum (das beruhigt) und sehe plötzlich im Kontextmenu meiner Solution einen Eintrag, den ich noch nicht kannte:

Abb. 1: Nuget im Solution-Kontextmenu

Also drauf da, denn der Titel klingt richtig. Das Ergebnis ist eine Nachfrage von Nuget:

Abb. 2: Nuget-Bestätigungs-Dialog

Nach einem Klick auf „Ja“ wird meiner Solution ein neuer Solution-Folder hinzugefügt und die in Abb. 1 gezeigte Option verschwindet aus dem Startmenu:

Abb 3: Neue Solution nach Aktion

Die NuGet.exe wird gesteuert durch die NuGet.targets nun beim Build-Prozess (Before) aufgerufen und sorgt automatisch dafür, dass fehlende Abhängigkeiten nachgeladen werden. Das klappt sogar mit im TFS eingecheckten Projekten problemlos.

Die *.target-Datei orientiert sich an den bekannten MSBuild-Dateien und implementiert auch schön standardkonform deren XML-Namespace. Es werden mehrere Targets definiert, die nach einigen Umgebungs-Checks letztlich die Binaries nachziehen.

Resumé

Für einfache Teamprojekte überschaubarer Größe ist das genau die Lösung, nach der ich gesucht habe. Nun kann Team-Member A nuget einsetzen, die Option anhaken und einchecken. Member B muss sich dann keine Sorgen um die Depenedencies machen oder womöglich die Konsole bemühen.

Nachteile bleiben systembedingt bestehen. Das hier (ich meine Nuget) ist kein Ersatz für ein versioniert gepflegtes Repository der Shared Assemblies auf dem TFS. Man bekommt beispielsweise Probleme in automatisierten Build-Umgebungen. Wer aber Nuget nur deshalb nicht einsetzt, weil ihm dieses Verhalten vormals gegen den Strich geht, der hat jetzt eine praktikable Lösung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.