Anmerkungen zu NuGet 2.8

NuGet 2.7.2 Versionshinweise | nuGet 2.8.1 – Versionshinweise

NuGet 2.8 wurde am 29. Januar 2014 veröffentlicht.

Danksagung

  1. [Llewellyn Pritchard](https://www.codeplex.com/site/users/view/leppie) (@leppie)
    • [#3466](https://nuget.codeplex.com/workitem/3466) – Beim Packen von Paketen überprüfen Sie die ID der Abhängigkeitspakete.
  2. [Maarten Balliauw](https://www.codeplex.com/site/users/view/maartenba) (@maartenballiauw)
    • [#2379](https://nuget.codeplex.com/workitem/2379) – Entfernen Sie das suffix $metadata beim Beibehalten von Feedanmeldedaten.
  3. [Filip De Vos](https://www.codeplex.com/site/users/view/FilipDeVos) (@foxtricks)
    • [#3538](http://nuget.codeplex.com/workitem/3538) – Unterstützung beim Angeben der Projektdatei für den Befehl nuget.exe update.
  4. [Juan Gonzalez](https://www.codeplex.com/site/users/view/jjgonzalez)
    • [#3536](http://nuget.codeplex.com/workitem/3536) – Ersatztoken, die nicht mit -IncludeReferencedProjects übergeben wurden.
  5. [David Poole](https://www.codeplex.com/site/users/view/Sarkie) (@Sarkie_Dave)
    • [#3677](http://nuget.codeplex.com/workitem/3677) – Behebt die OutOfMemoryException von nuget.push, wenn ein großes Paket gepusht wird.
  6. [Wouter Ouwens](https://www.codeplex.com/site/users/view/Despotes)
    • [#3666](http://nuget.codeplex.com/workitem/3666) – Behebt den falschen Zielpfad, wenn das Projekt auf ein anderes CLI/C++-Projekt verweist.
  7. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph) (@adamralph)
    • [#3639](https://nuget.codeplex.com/workitem/3639) – Standardmäßiges Installieren von Paketen als Entwicklungsabhängigkeiten zulassen
  8. [David Fowler](https://www.codeplex.com/site/users/view/dfowler) (@davidfowl)
    • [#3717](https://nuget.codeplex.com/workitem/3717) – Entfernen impliziter Upgrades auf die neueste Patchversion
  9. [Gregory Vandenbrouck](https://www.codeplex.com/site/users/view/vdbg)
    • Verschiedene Programmfehlerbehebungen und Verbesserungen für NuGet.Server, den Befehl nuget.exe Spiegel und andere.
    • Diese Arbeit wurde über mehrere Monate durchgeführt, wobei Gregory mit uns an der richtigen Zeit für die Integration in Master für 2.8 arbeitet.

Patchlösung für Abhängigkeiten

Beim Auflösen von Paketabhängigkeiten hat NuGet historisch eine Strategie implementiert, die niedrigste Haupt- und Nebenpaketversion auszuwählen, die den Abhängigkeiten des Pakets entspricht. Im Gegensatz zur Haupt- und Nebenversion wurde die Patchversion jedoch immer auf die höchste Version aufgelöst. Obwohl dieses Verhalten gut gemeint war, führte es zu einem Mangel an Entscheidung bei der Installation von Paketen mit Abhängigkeiten. Betrachten Sie das folgende Beispiel:

PackageA@1.0.0 -[ >=1.0.0 ]-> PackageB@1.0.0

Developer1 installs PackageA@1.0.0: installed PackageA@1.0.0 and PackageB@1.0.0

PackageB@1.0.1 is published

Developer2 installs PackageA@1.0.0: installed PackageA@1.0.0 and PackageB@1.0.1

In diesem Beispiel haben Developer1 und Developer2 PackageA@1.0.0 installiert, wobei jeder mit einer anderen Version von PackageB endete. NuGet 2.8 ändert dieses Standardverhalten so, dass das Verhalten der Abhängigkeitsauflösung für Patchversionen mit dem Verhalten für Haupt- und Nebenversionen konsistent ist. Im obigen Beispiel würde dann PackageB@1.0.0 als Ergebnis der Installation von PackageA@1.0.0 installiert werden, unabhängig von der neueren Patchversion.

-DependencyVersion ERSTERWERT

Obwohl NuGet 2.8 das Standardverhalten für die Auflösung von Abhängigkeiten ändert, fügt es auch eine genauere Kontrolle über den Prozess der Abhängigkeitsauflösung über den Switch -DependencyVersion in der Paket-Manager-Konsole hinzu. Die Option ermöglicht das Auflösen von Abhängigkeiten auf die niedrigste mögliche Version (Standardverhalten), die höchste mögliche Version oder die höchste Neben- oder Patchversion. Dieser Switch funktioniert nur für das Installationspaket im PowerShell-Befehl.

DependencyVersion Switch

DependencyVersion-Attribut

Zusätzlich zur oben beschriebenen Option -DependencyVersion hat NuGet auch die Möglichkeit erlaubt, ein neues Attribut in der Datei Nuget.Config festzulegen, die definiert, was der Standardwert ist, wenn der ERSTERWERT -DependencyVersion nicht in einem Aufruf des Installationspakets angegeben ist. Dieser Wert wird auch vom NuGet-Paket-Manager Dialog für alle Installationspaketvorgänge berücksichtigt. Um diesen Wert festzulegen, fügen Sie das folgende Attribut zur Datei Nuget.Config hinzu:

<config>
    <add key="dependencyversion" value="Highest" />
</config>

Vorschau von NuGet-Vorgängen mit -whatif

Einige NuGet-Pakete können umfassende Abhängigkeitsdiagramm haben, und daher kann es während einer Installation, Deinstallation oder eines Updatevorgangs hilfreich sein, um zuerst zu sehen, was passiert. NuGet 2.8 fügt den Standard-PowerShell-ERSTERWERT -whatif zu den Befehlen install-package, uninstall-package und update-package hinzu, um die Visualisierung der gesamten Schließung von Paketen zu ermöglichen, auf die der Befehl angewendet werden soll. Wenn Sie z. B. install-package Microsoft.AspNet.WebApi -whatif in einer leeren ASP.NET-Webanwendung ausführen, wird Folgendes erzielt.

PM> install-package Microsoft.AspNet.WebApi -whatif
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.WebHost (≥ 5.0.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Core (≥ 5.0.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Client (≥ 5.0.0)'.
Attempting to resolve dependency 'Newtonsoft.Json (≥ 4.5.11)'.
Install Newtonsoft.Json 4.5.11
Install Microsoft.AspNet.WebApi.Client 5.0.0
Install Microsoft.AspNet.WebApi.Core 5.0.0
Install Microsoft.AspNet.WebApi.WebHost 5.0.0
Install Microsoft.AspNet.WebApi 5.0.0

Downgradepaket

Es ist nicht ungewöhnlich, eine Vorabversion eines Pakets zu installieren, um neue Features zu untersuchen und dann ein Rollback auf die letzte stabile Version durchzuführen. Vor NuGet 2.8 war dies ein mehrstufiger Prozess zum Deinstallieren des Vorabpakets und seiner Abhängigkeiten und anschließender Installation der früheren Version. Mit NuGet 2.8 wird das Updatepaket nun jedoch den gesamten Paketabschluss (z. B. die Abhängigkeitsstruktur des Pakets) auf die vorherige Version zurücksetzen.

Entwicklungsabhängigkeiten:

Viele verschiedene Arten von Funktionen können als NuGet-Pakete bereitgestellt werden – einschließlich Tools, die zur Optimierung des Entwicklungsprozesses verwendet werden. Diese Komponenten können zwar bei der Entwicklung eines neuen Pakets von entscheidender Bedeutung sein, sollten jedoch nicht als Abhängigkeit des neuen Pakets betrachtet werden, wenn es später veröffentlicht wird. NuGet 2.8 ermöglicht es einem Paket, sich in der .nuspec Datei als Entwicklungsabhängigkeit zu identifizieren. Bei der Installation werden diese Metadaten auch der packages.config Datei des Projekts hinzugefügt, in der das Paket installiert wurde. Wenn diese packages.config Datei später während nuget.exe pack auf NuGet-Abhängigkeiten analysiert wird, werden die als Entwicklungsabhängigkeiten markierten Abhängigkeiten ausgeschlossen.

Einzelne packages.config-Dateien für verschiedene Plattformen

Bei der Entwicklung von Anwendungen für mehrere Zielplattformen ist es üblich, für jede der jeweiligen Buildumgebungen unterschiedliche Projektdateien zu verwenden. Es ist auch üblich, unterschiedliche NuGet-Pakete in verschiedenen Projektdateien zu nutzen, da Pakete unterschiedliche Unterstützungsebenen für verschiedene Plattformen haben. NuGet 2.8 bietet eine verbesserte Unterstützung für dieses Szenario, indem verschiedene packages.config Dateien für verschiedene plattformspezifische Projektdateien erstellt werden.

Multiple package.config files

Fallback auf lokalen Cache

Obwohl NuGet-Pakete in der Regel aus einem Remotekatalog wie dem NuGet-Katalog mit einer Netzwerkverbindung genutzt werden, gibt es viele Szenarien, in denen der Client nicht verbunden ist. Ohne Netzwerkverbindung konnte der NuGet-Client keine Pakete erfolgreich installieren – auch wenn diese Pakete bereits auf dem Computer des Clients im lokalen NuGet-Cache vorhanden waren. NuGet 2.8 fügt der Paket-Manager-Konsole automatische Cache-Fallback hinzu. Wenn Sie z. B. den Netzwerkadapter trennen und jQuery installieren, zeigt die Konsole Folgendes:

PM> Install-Package jquery
The source at nuget.org [https://www.nuget.org/api/v2/] is unreachable. Falling back to NuGet Local Cache at C:\Users\me\AppData\Local\NuGet\Cache
Installing 'jQuery 2.0.3'.
Successfully installed 'jQuery 2.0.3'.
Adding 'jQuery 2.0.3' to WebApplication18.
Successfully added 'jQuery 2.0.3' to WebApplication18.

Für das Cache-Fallbackfeature sind keine bestimmten Befehlsargumente erforderlich. Darüber hinaus funktioniert der Cache-Fallback derzeit nur in der Paket-Manager-Konsole . Das Verhalten funktioniert derzeit nicht im Dialogfeld Paket-Manager.

WebMatrix NuGet-Clientupdates

Zusammen mit NuGet 2.8 wurde die NuGet-Erweiterung für WebMatrix auch aktualisiert, um viele der wichtigsten Features zu enthalten, die mit NuGet 2.5 bereitgestellt werden. Zu den neuen Funktionen gehören z. B. „Alle aktualisieren“, „Minimale NuGet-Version“ und das Überschreiben von Inhaltsdateien.

So aktualisieren Sie Ihre NuGet-Paket-Manager-Erweiterung in WebMatrix 3:

  1. WebMatrix 3 öffnen
  2. Klicken Sie auf der linken Randleiste auf das Symbol Erweiterungen.
  3. Wählen Sie die Registerkarte Updates aus.
  4. Klicken Sie hier, um NuGet-Paket-Manager auf 2.5.0 zu aktualisieren.
  5. Schließen und Neustarten von WebMatrix 3

Dies ist die erste Version des NuGet-Teams der NuGet-Paket-Manager-Erweiterung für WebMatrix. Der Code wurde kürzlich von Microsoft zum Open-Source-NuGet-Projekt beigetragen. Zuvor wurde die NuGet-Integration in WebMatrix integriert und konnte nicht aus dem Inforegister von WebMatrix aktualisiert werden. Wir haben nun die Funktionalität, sie zusammen mit den restlichen NuGet-Clienttools weiter zu aktualisieren.

Fehlerkorrekturen

Eine der wichtigsten Fehlerkorrekturen, die vorgenommen wurden, war Leistungsverbesserung im Befehl Update-package -reinstall.

Zusätzlich zu diesen Features und der oben erwähnten Leistungsverbesserung enthält diese Version von NuGet auch viele andere Fehlerbehebungen. In der Version wurden insgesamt 181 Probleme behoben. Eine vollständige Liste der Arbeitselemente, die in NuGet 2.8 behoben wurden, sehen Sie hier [NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.8&status=all).