Nicht automatisch aktualisieren können ein NuGet-Paket auf die neueste version beim bauen

Haben wir zwei verschiedene .NET solutions:

  • Läuft ein build für die erste Lösung produziert unser Endprodukt: ein paar DLLs. Diese DLLs an unsere Kunden ausgeliefert werden, die über ein NuGet-Paket.
  • Der zweiten Lösung dient als ein Produkt-test-Lösung: das NuGet-Paket installiert ist, um es, und es wird gebaut und ausgeführt - so macht es die Verwendung unserer Produkte genau auf die gleiche Weise wie unsere Kunden tun würde.

Die Herausforderung hier ist, dass es sollte eine Möglichkeit unsere aktuelle NuGet-Paket wird automatisch installiert, um die Produkt-test-Lösung, bevorzugt während der Erstellung dieses Produkt-test-Lösung.

Basiert auf den Ideen von eine ähnliche Frage, ich bin soweit gekommen mit der Konfiguration, die Produkt-test-Lösung:

  • Zuerst habe ich aktiviert NuGet-Package-Restore. Dies ermöglicht mir loszuwerden, das Verzeichnis "Pakete" komplett aus VCS, da das Paket mit der version definiert in packages.config-Datei automatisch heruntergeladen werden von NuGet vor dem Bau.
  • Dann habe ich noch folgende pre-build-Ereignis in Visual Studio: $(SolutionDir).nuget\nuget update -prerelease $(ProjectDir)packages.config. Dies lässt mich ziehen in die neueste version unserer NuGet-Paket bei bauen.

Derzeit nutze ich das oben beschriebene Szenario zum ausführen von lokalen builds mit Visual Studio und unbeaufsichtigte baut mit TeamCity. Die Lösung scheint zu funktionieren für beide Szenarien auf den ersten Blick, aber eigentlich es nicht zu dem erwarteten Ergebnis: wenn die Produkt-test-Lösung gebaut, in der bin Verzeichnis habe ich nicht die neueste version der DLLs, nur in der neuesten version 1.

Das problem ist, dass, obwohl die nuget update Befehl aktualisiert, alles wie erwartet, einschließlich der packages.config und die .csproj Datei, deren neue Inhalte nicht abgeholt zu bauen, deshalb - so meine Vermutung geht - die HintPath Einstellungen aus der .csproj Datei noch spiegeln eine "Ehe bauen" - Zustand, also die alten DLLs kopiert bin - Verzeichnis. Ich nehme an, die .csproj Datei nur einmal verarbeitet wird: vor dem pre-build-Ereignis wird ausgelöst, und die änderungen, die die pre-build-Ereignis werden ignoriert, bis die nächste build.

Als ich die folgenden Lösungen:

  • Offenbar pre-build ist nicht "pre" genug. Wenn es einem noch früheren Punkt, den ich einfügen könnte die nuget update Befehl, meine obige Lösung würde wahrscheinlich funktionieren.
  • Ich gelesen, ich könnte das überschreiben der HintPath-s in der .csproj-Datei mit der Definition einer ReferencePath. Aber ich bezweifle, ich könnte ganz einfach herausfinden, den richtigen Weg oder könnte ich es früh genug, so dass das bauen in die Hand nimmt.
  • Als workaround konnte ich die builds zweimal: duplizieren Sie die build-Schritt für die Produkt-test-Lösung TeamCity und konnte ich immer bauen die Lösung zweimal lokal in Visual Studio.

Hat jemand herausgefunden, wie die automatische update ein NuGet-Paket auf die neueste version während bauen?

InformationsquelleAutor remark | 2013-02-22
Schreibe einen Kommentar