Eine Einführung in NuGetAn introduction to NuGet

Ein unverzichtbares Tool für jede moderne Entwicklungsplattform ist ein Mechanismus, durch den Entwickler nützlichen Code erstellen, freigeben und verwenden können.An essential tool for any modern development platform is a mechanism through which developers can create, share, and consume useful code. Solch ein Code wird oft in „Paketen“ gebündelt, in denen kompilierter Code (z.B. DLLs) zusammen mit anderen Inhalten enthalten ist, die in Projekten benötigt werden, die diese Pakete nutzen.Often such code is bundled into "packages" that contain compiled code (as DLLs) along with other content needed in the projects that consume these packages.

Für .NET (einschließlich .NET Core) ist der von Microsoft unterstützte Mechanismus zur Freigabe von Code NuGet, das definiert, wie Pakete für .NET erstellt, gehostet und verarbeitet werden, und es stellt die Tools für jede dieser Aktionen bereit.For .NET (including .NET Core), the Microsoft-supported mechanism for sharing code is NuGet, which defines how packages for .NET are created, hosted, and consumed, and provides the tools for each of those roles.

Einfach gesagt: ein NuGet-Paket ist eine einzelne ZIP-Datei mit der Erweiterung .nupkg, die kompilierten Code (DLLs), andere Dateien im Zusammenhang mit diesem Code und ein beschreibendes Manifest enthält, in dem Informationen wie die Versionsnummer des Pakets enthalten sind.Put simply, a NuGet package is a single ZIP file with the .nupkg extension that contains compiled code (DLLs), other files related to that code, and a descriptive manifest that includes information like the package's version number. Entwickler, die Code teilen wollen, erstellen und veröffentlichen Pakete auf einem öffentlichen oder privaten Host.Developers with code to share create packages and publish them to a public or private host. Paketverbraucher erhalten diese Pakete über entsprechende Hosts, fügen diese ihren Projekten hinzu und rufen dann die Funktionalität eines Pakets in ihrem Projektcode auf.Package consumers obtain those packages from suitable hosts, add them to their projects, and then call a package's functionality in their project code. NuGet selbst verarbeitet dann alle Zwischendetails.NuGet itself then handles all of the intermediate details.

Da NuGet neben dem öffentlichen Host „nuget.org“ auch private Hosts unterstützt, können Sie NuGet-Pakete verwenden, um Code zu teilen, der ausschließlich für eine Organisation oder eine Arbeitsgruppe zur Verfügung steht.Because NuGet supports private hosts alongside the public nuget.org host, you can use NuGet packages to share code that's exclusive to an organization or a work group. Sie können NuGet-Pakete auch als einfache Möglichkeit verwenden, um Ihren eigenen Code nur in Ihre eigenen Projekte einzubinden.You can also use NuGet packages as a convenient way to factor your own code for use in nothing but your own projects. Kurz gesagt: Ein NuGet-Paket ist eine teilbare Codeeinheit, die eine bestimmte Art und Weise der Freigabe weder benötigt noch vorgibt.In short, a NuGet package is a shareable unit of code, but does not require nor imply any particular means of sharing.

Der Paketfluss zwischen Erstellern, Hosts und BenutzerThe flow of packages between creators, hosts, and consumers

In seiner Rolle als öffentlicher Host verwaltet NuGet selbst das zentrale Repository von über 100.000 eindeutigen Paketen auf nuget.org. Diese Pakete werden täglich von Millionen von .NET/.NET Core-Entwicklern verwendet.In its role as a public host, NuGet itself maintains the central repository of over 100,000 unique packages at nuget.org. These packages are employed by millions of .NET/.NET Core developers every day. Mit NuGet können Sie auch Pakete privat in der Cloud (z.B. Azure DevOps), in einem privaten Netzwerk oder sogar nur auf Ihrem lokalen Dateisystem hosten.NuGet also enables you to host packages privately in the cloud (such as on Azure DevOps), on a private network, or even on just your local file system. Auf diese Weise stehen diese Pakete nur den Entwicklern zur Verfügung, die Zugriff auf den Host haben, wodurch Sie die Möglichkeit haben, Pakete für eine bestimmte Gruppe von Anwendern verfügbar zu machen.By doing so, those packages are available to only those developers that have access to the host, giving you the ability to make packages available to a specific group of consumers. Die Optionen werden in Hosting your own NuGet feeds (Hosten Ihrer eigenen NuGet-Feeds) erläutert.The options are explained on Hosting your own NuGet feeds. Durch Konfigurationsoptionen können Sie auch steuern, auf welchen Host von einem Computer zugegriffen werden kann, wodurch sichergestellt wird, dass Pakete von bestimmten Quellen abgerufen werden, anstelle von öffentlichen Repositorys wie nuget.org.Through configuration options, you can also control exactly which hosts can be accessed by any given computer, thereby ensuring that packages are obtained from specific sources rather than a public repository like nuget.org.

Ein beliebiger Host dient als Verbindungspunkt zwischen Paketerstellern und Paketverbrauchern.Whatever its nature, a host serves as the point of connection between package creators and package consumers. Ersteller erstellen nützliche NuGet-Pakete und veröffentlichen Sie auf einem Host.Creators build useful NuGet packages and publish them to a host. Benutzer suchen dann nach nützlichen und kompatiblen Paketen auf zugänglichen Hosts, laden diese Pakete herunter und schließen sie in Ihre Projekte ein.Consumers then search for useful and compatible packages on accessible hosts, downloading and including those packages in their projects. Nach der Installation in einem Projekt sind die Paket-APIs für den restlichen Projektcode verfügbar.Once installed in a project, the packages' APIs are available to the rest of the project code.

Beziehung zwischen Paketerstellern, Pakethosts und Paketbenutzer

Paket mit ZielkompatibilitätPackage targeting compatibility

Ein „kompatibles“ Paket bedeutet, dass es Assemblys enthält, die für mindestens ein .NET-Zielframework erstellt wurden, das mit dem Zielframework des nutzenden Projekts kompatibel ist.A "compatible" package means that it contains assemblies built for at least one target .NET framework that's compatible with the consuming project's target framework. Entwickler können Pakete erstellen, die spezifisch auf ein Framework ausgelegt sind, wie bei UWP-Steuerelementen, oder sie unterstützen eine größere Anzahl von Zielen.Developers can create packages that are specific to one framework, as with UWP controls, or they can support a wider range of targets. Entwickler legen .NET Standard als Ziel fest, da es von allen .NET- und .NET Core-Projekten verwendet werden kann, um die Kompatibilität eines Pakets zu maximieren.To maximize a package's compatibility, developers target .NET Standard, which all .NET and .NET Core projects can consume. Dies ist die effizienteste Methode für Ersteller und Verbraucher, da ein einzelnes Paket (das in der Regel nur eine einzelne Assembly enthält) für alle verarbeitenden Projekte funktioniert.This is the most efficient means for both creators and consumers, as a single package (usually containing a single assembly) works for all consuming projects.

Im Gegensatz dazu erstellen Paketentwickler, die APIs außerhalb von .NET Standard verwenden, separate Assemblys für verschiedene Zielframeworks, die sie unterstützen wollen, und schließen all diese Assemblys in das gleiche Paket mit ein (auch bekannt als „Festlegung von mehreren Zielversionen“).Package developers who require APIs outside of .NET Standard, on the other hand, create separate assemblies for the different target frameworks they want to support and include all of those assemblies in the same package (which is called "multi-targeting"). Wenn ein Verbraucher ein solches Paket installiert, extrahiert NuGet nur die Assemblys, die vom Projekt benötigt werden.When a consumer installs such a package, NuGet extracts only those assemblies that are needed by the project. Dadurch wird der Speicherbedarf des Pakets in der fertigen Anwendung bzw. in den vom Projekt erzeugten Assemblys gesenkt.This minimizes the package's footprint in the final application and/or assemblies produced by that project. Es ist für den Ersteller aufwendiger, ein Paket mit mehreren Zielversionen auf dem neuesten Stand zu halten.A multi-targeting package is, of course, more difficult for its creator to maintain.

Hinweis

Die Zielsetzung von .NET Standard ersetzt den vorherigen Ansatz, verschiedene portable Klassenbibliotheken (PCL) als Ziele zu verwenden.Targeting .NET Standard supersedes the previous approach of using various portable class library (PCL) targets. Deshalb liegt in dieser Dokumentation der Schwerpunkt auf dem Erstellen von Paketen für .NET Standard.This documentation therefore focuses on creating packages for .NET Standard.

NuGet-ToolsNuGet tools

Zusätzlich zur Unterstützung für das Hosting bietet NuGet außerdem eine Vielzahl von Tools, die vom Ersteller und Benutzer verwendet werden.In addition to hosting support, NuGet also provides a variety of tools used by both creators and consumers. Informationen dazu, wie Sie bestimmte Tools erhalten, finden Sie unter Installieren von NuGet-Clienttools.See Installing NuGet client tools for how to obtain specific tools.

ToolTool PlattformenPlatforms Anwendbare SzenariosApplicable Scenarios BeschreibungDescription
dotnet-CLIdotnet CLI AlleAll Erstellung, VerbrauchCreation, Consumption CLI-Tool für .NET Core- und .NET Standard-Bibliotheken und für Projekte im SDK-Stil für .NET Framework (Informationen finden Sie unter SDK-Attribut).CLI tool for .NET Core and .NET Standard libraries, and for SDK-style projects that target .NET Framework (see SDK attribute). Stellt bestimmte NuGet-CLI-Funktionen direkt in der .NET Core-Toolkette bereit.Provides certain NuGet CLI capabilities directly within the .NET Core tool chain. Ähnlich wie NuGet-CLI interagiert die dotnet-CLI nicht mit Visual Studio-Projekten.As with the NuGet CLI, the dotnet CLI does not interact with Visual Studio projects.
nuget.exe-CLInuget.exe CLI AlleAll Erstellung, VerbrauchCreation, Consumption CLI-Tool für .NET Framework-Bibliotheken und Nicht-SDK-Projekte, die auf .NET Standard-Bibliotheken abzielen.CLI tool for .NET Framework libraries and non-SDK-style projects that target .NET Standard libraries. Bietet alle NuGet-Funktionen, mit einigen Befehlen, die speziell für Paketersteller bestimmt sind, anderen Befehlen, die nur für Benutzer, und wieder anderen, die für beide bestimmt sind.Provides all NuGet capabilities, with some commands applying specifically to package creators, some applying only to consumers, and others applying to both. Beispielsweise verwenden Paketersteller den Befehl nuget pack zum Erstellen eines Pakets aus verschiedenen Assemblys und zugehörigen Dateien, Paketverbraucher verwenden nuget install, um Pakete in einen Projektordner einzubinden, und alle verwenden nuget config, um NuGet-Konfigurationsvariablen festzulegen.For example, package creators use the nuget pack command to create a package from various assemblies and related files, package consumers use nuget install to include packages in a project folder, and everyone uses nuget config to set NuGet configuration variables. Als ein plattformunabhängiges Tool interagiert die NuGet-CLI nicht mit Visual Studio-Projekten.As a platform-agnostic tool, the NuGet CLI does not interact with Visual Studio projects.
Paket-Manager-KonsolePackage Manager Console Visual Studio unter WindowsVisual Studio on Windows VerbrauchConsumption Stellt PowerShell-Befehle zum Installieren und Verwalten von Paketen in Visual Studio-Projekten bereit.Provides PowerShell commands for installing and managing packages in Visual Studio projects.
Benutzeroberfläche des Paket-ManagersPackage Manager UI Visual Studio unter WindowsVisual Studio on Windows VerbrauchConsumption Stellt eine einfache zu bedienende Benutzeroberfläche zum Installieren und Verwalten von Paketen in Visual Studio-Projekten bereit.Provides an easy-to-use UI for installing and managing packages in Visual Studio projects.
Manage NuGet UI (Verwalten der NuGet-Benutzeroberfläche)Manage NuGet UI Visual Studio für MacVisual Studio for Mac VerbrauchConsumption Stellt eine einfache zu bedienende Benutzeroberfläche zum Installieren und Verwalten von Paketen in Projekten von Visual Studio für Mac bereit.Provide an easy-to-use UI for installing and managing packages in Visual Studio for Mac projects.
MSBuildMSBuild WindowsWindows Erstellung, VerbrauchCreation, Consumption Bietet die Möglichkeit zum Erstellen und Wiederherstellen von Paketen, die in einem Projekt direkt über die MSBuild-Toolkette verwendet werden.Provides the ability to create packages and restore packages used in a project directly through the MSBuild tool chain.

Wie Sie sehen können, sind die NuGet-Tools, mit denen Sie arbeiten, stark davon abhängig, ob Sie Pakete erstellen, verwenden oder veröffentlichen und mit welcher Plattform Sie arbeiten.As you can see, the NuGet tools you work with depend greatly on whether you're creating, consuming, or publishing packages, and the platform on which you're working. Paketersteller sind in der Regel auch Benutzer, da sie auf Funktionalität aufbauen, die in anderen NuGet-Paketen vorhanden ist.Package creators are typically also consumers, as they build on top of functionality that exists in other NuGet packages. Und diese Pakete können natürlich wiederum von anderen abhängen.And those packages, of course, may in turn depend on still others.

Weitere Informationen finden Sie unter den Artikeln Workflow für die Paketerstellung und Workflow für die Nutzung von Paketen.For more information, start with the Package creation workflow and Package consumption workflow articles.

Verwalten von AbhängigkeitenManaging dependencies

Die Fähigkeit, einfach auf der Arbeit anderer aufbauen zu können, ist eines der stärksten Features eines Paketverwaltungssystems.The ability to easily build on the work of others is one of most powerful features of a package management system. Dementsprechend ist eine der wichtigsten Aufgaben von NuGet das Verwalten der Abhängigkeitsstruktur bzw. des „Diagramms“ für ein Projekt.Accordingly, much of what NuGet does is managing that dependency tree or "graph" on behalf of a project. Einfach ausgedrückt müssen Sie sich nur mit jenen Paketen selbst befassen, die Sie direkt in einem Projekt verwenden.Simply said, you need only concern yourself with those packages that you're directly using in a project. Wenn irgendeines dieser Pakete selbst andere Pakete verwendet (die wiederum weitere Pakete verwenden können), übernimmt NuGet alle der früheren Abhängigkeiten.If any of those packages themselves consume other packages (which can, in turn, consume still others), NuGet takes care of all those down-level dependencies.

Die folgende Abbildung zeigt ein Projekt, das von fünf Paketen abhängig ist, die wiederum von einer Reihe anderer abhängen.The following image shows a project that depends on five packages, which in turn depend on a number of others.

Ein Beispiel für ein NuGet-Abhängigkeitsdiagramm für ein .NET-Projekt

Beachten Sie, dass einige Pakete mehrmals im Abhängigkeitsdiagramm angezeigt werden.Notice that some packages appear multiple times in the dependency graph. Beispielsweise gibt es drei verschiedene Benutzer des Pakets B, und jeder Benutzer könnte auch eine andere Version für das Paket (nicht gezeigt) angeben.For example, there are three different consumers of package B, and each consumer might also specify a different version for that package (not shown). Dieser Fall tritt häufig auf, insbesondere bei häufig verwendeten Paketen.This is a common occurrence, especially for widely-used packages. NuGet übernimmt alle schwierigen Aufgaben, um genau zu bestimmen, welche Version des Pakets B alle Benutzer zufriedenstellt.NuGet fortunately does all the hard work to determine exactly which version of package B satisfies all consumers. NuGet führt dies dann für alle anderen Pakete durch, unabhängig davon, wie ausführlich das Abhängigkeitsdiagramm wird.NuGet then does the same for all other packages, no matter how deep the dependency graph.

Weitere Details wie NuGet diesen Dienst ausführt finden Sie unter Dependency resolution (Abhängigkeitsauflösung).For more details on how NuGet performs this service, see Dependency resolution.

Nachverfolgungsverweise und Wiederherstellen von PaketenTracking references and restoring packages

Da Projekte zwischen Entwicklercomputern, Repositorys für die Quellcodeverwaltung, Buildservern usw. problemlos verschoben werden können, ist es höchst unpraktisch, dass binäre Assemblys von NuGet-Paketen direkt an ein Projekt gebunden bleiben.Because projects can easily move between developer computers, source control repositories, build servers, and so forth, it's highly impractical to keep the binary assemblies of NuGet packages directly bound to a project. Wäre das der Fall, wäre jede Kopie des Projekts unnötigerweise vergrößert (und deshalb eine Verschwendung von Speicherplatz in Repositorys zur Quellcodeverwaltung).Doing so would make each copy of the project unnecessarily bloated (and thereby waste space in source control repositories). Es wäre auch schwer, Binärdateien von Paketen auf neuere Versionen zu aktualisieren, da Updates auf alle Kopien des Projekts angewendet werden müssten.It would also make it very difficult to update package binaries to newer versions as updates would have to be applied across all copies of the project.

Stattdessen verwaltet NuGet eine einfach Verweisliste der Pakete von denen ein Projekt abhängig ist, einschließlich der Abhängigkeiten der obersten und untersten Ebenen.NuGet instead maintains a simple reference list of the packages upon which a project depends, including both top-level and down-level dependencies. D.h. wenn Sie ein Paket in ein Projekt von einem Host aus installieren, zeichnet NuGet die Paket-ID und Versionsnummer in der Verweisliste auf.That is, whenever you install a package from some host into a project, NuGet records the package identifier and version number in the reference list. (Wenn ein Paket deinstalliert wird, wird dieses natürlich aus der Liste entfernt.) NuGet bietet dann eine Möglichkeit, auf Anfrage alle Pakete, auf die verwiesen wird, wiederherzustellen, wie im Artikel Wiederherstellen von Paketen beschrieben wird.(Uninstalling a package, of course, removes it from the list.) NuGet then provides a means to restore all referenced packages upon request, as described on Package restore.

Eine NuGet-Verweisliste wird bei Paketinstallation erstellt und kann zum Wiederherstellen von Paketen an einem anderen Ort verwendet werden.

Mit der Verweisliste kann NuGet anschließend alle Pakete zu einem späteren Zeitpunkt neu installieren — also wiederherstellen — die von öffentlichen und bzw. oder privaten Hosts stammen.With only the reference list, NuGet can then reinstall—that is, restore—all of those packages from public and/or private hosts at any later time. Wenn Sie ein Projekt auf die Quellcodeverwaltung committen oder auf andere Weise freigeben, muss nur die Verweisliste enthalten sein. Es müssen keine Paketbinärdateien eingeschlossen werden (Näheres finden Sie unter Pakete und Quellcodeverwaltung).When committing a project to source control, or sharing it in some other way, you include only the reference list and exclude any package binaries (see Packages and source control.)

Der Computer, der ein Projekt, z.B. einen Buildserver, erhält, der eine Kopie des Projekts als Teil eines automatisierten Bereitstellungssystems empfängt, fordert NuGet einfach auf, Abhängigkeiten wiederherzustellen, wenn sie benötigt werden.The computer that receives a project, such as a build server obtaining a copy of the project as part of an automated deployment system, simply asks NuGet to restore dependencies whenever they're needed. Buildsysteme, wie Azure DevOps, stellen „NuGet restore“-Schritte für exakt diesen Zweck bereit.Build systems like Azure DevOps provide "NuGet restore" steps for this exact purpose. Auf ähnliche Weise können Entwickler einen Befehl wie nuget restore (NuGet-CLI), dotnet restore (dotnet-CLI) oder Install-Package (Paket-Manager-Konsole) aufrufen, wenn sie eine Kopie eines Projekts erhalten (z.B. beim Kopieren eines Repositorys), um alle benötigten Pakete zu erhalten.Similarly, when developers obtain a copy of a project (as when cloning a repository), they can invoke command like nuget restore (NuGet CLI), dotnet restore (dotnet CLI), or Install-Package (Package Manager Console) to obtain all the necessary packages. Visual Studio seinerseits stellt Pakete beim Erstellen eines Projekts automatisch wieder her (vorausgesetzt, die automatische Wiederherstellung ist aktiviert, wie unter Paketwiederherstellung beschrieben).Visual Studio, for its part, automatically restores packages when building a project (provided that automatic restore is enabled, as described on Package restore).

Die primäre Rolle von NuGet bei Entwicklern liegt dann klar im Verwalten der Verweisliste für Ihr Projekt und im Bereitstellen der Möglichkeiten, um diese referenzierten Pakete effizient wiederherzustellen (und zu aktualisieren).Clearly, then, NuGet's primary role where developers are concerned is maintaining that reference list on behalf of your project and providing the means to efficiently restore (and update) those referenced packages. Die Liste wird in einem von zwei Paketverwaltungsformaten verwaltet:This list is maintained in one of two package management formats, as they're called:

  • PackageReference (bzw. „Packen von Verweisen in Projektdateien“) | (NuGet 4.0 und höher) verwaltet eine Liste der Abhängigkeiten der obersten Ebene eines Projekts direkt in der Projektdatei, damit keine separate Datei benötigt wird.PackageReference (or "package references in project files") | (NuGet 4.0+) Maintains a list of a project's top-level dependencies directly within the project file, so no separate file is needed. Eine zugehörige Datei, obj/project.assets.json, wird dynamisch generiert, um das gesamte Abhängigkeitsdiagramm der von einem Projekt verwendeten Pakete zusammen mit allen untergeordneten Abhängigkeiten zu verwalten.An associated file, obj/project.assets.json, is dynamically generated to manage the overall dependency graph of the packages that a project uses along with all down-level dependencies. PackageReference wird immer von .NET Core-Projekten verwendet.PackageReference is always used by .NET Core projects.

  • packages.config: (NuGet 1.0 und höher) Eine XML-Datei, die eine flache Liste aller Abhängigkeiten im Projekt, einschließlich der Abhängigkeiten von anderen installierten Paketen, verwaltet.packages.config: (NuGet 1.0+) An XML file that maintains a flat list of all dependencies in the project, including the dependencies of other installed packages. Installierte oder wiederhergestellte Pakete werden in einem packages-Ordner gespeichert.Installed or restored packages are stored in a packages folder.

Welches Paketverwaltungsformat in einen Projekt verwendet wird, hängt vom Projekttyp und der verfügbaren Version von NuGet (und bzw. oder Visual Studio) ab.Which package management format is employed in any given project depends on the project type, and the available version of NuGet (and/or Visual Studio). Suchen Sie nach packages.config im Projektstamm, nachdem Sie das erste Paket installiert haben, um zu überprüfen, welches Format verwendet wird.To check what format is being used, simply look for packages.config in the project root after installing your first package. Wenn die Datei nicht angezeigt wird, suchen Sie direkt in der Projektdatei nach einem <PackageReference>-Element.If you don't have that file, look in the project file directly for a <PackageReference> element.

Wenn Sie die Wahl haben, wird die Verwendung von PackageReference empfohlen.When you have a choice, we recommend using PackageReference. packages.config wird zu Legacyzwecken beibehalten und befindet sich nicht mehr in der aktiven Entwicklung.packages.config is maintained for legacy purposes and is no longer under active development.

Tipp

Verschiedene nuget.exe-CLI-Befehle, wie nuget install, fügen das Paket nicht automatisch zur Verweisliste hinzu.Various nuget.exe CLI commands, like nuget install, do not automatically add the package to the reference list. Die Liste wird bei der Installation eines Pakets mit dem Visual Studio-Paket-Manager (Benutzeroberfläche oder Konsole) und mit der dotnet.exe-CLI aktualisiert.The list is updated when installing a package with the Visual Studio Package Manager (UI or Console), and with dotnet.exe CLI.

Was macht NuGet außerdem?What else does NuGet do?

Bisher haben Sie folgende Eigenschaften von NuGet kennengelernt:So far you've learned the following characteristics of NuGet:

  • NuGet stellt das zentrale nuget.org-Repository mit Unterstützung von privatem Hosting bereit.NuGet provides the central nuget.org repository with support for private hosting.
  • NuGet stellt die Tools zur Verfügung, die Entwickler benötigen, um Pakete zu erstellen, zu veröffentlichen und zu nutzen.NuGet provides the tools developers need for creating, publishing, and consuming packages.
  • Besonders wichtig ist: NuGet verwaltet eine Verweisliste der Pakete, die in einem Projekt verwendet werden und verfügt über die Möglichkeit zum Wiederherstellen und Aktualisieren dieser Pakete aus dieser Liste.Most importantly, NuGet maintains a reference list of packages used in a project and the ability to restore and update those packages from that list.

Damit diese Prozesse effizient arbeiten, führt NuGet einige Optimierungen im Hintergrund durch.To make these processes work efficiently, NuGet does some behind-the-scenes optimizations. Insbesondere verwaltet NuGet einen Paketcache und einen globalen Paketordner, um die Installation und Neuinstallation zu beschleunigen.Most notably, NuGet manages a package cache and a global packages folder to shortcut installation and reinstallation. Der Cache verhindert das Herunterladen eines Pakets, das bereits auf dem Rechner installiert ist.The cache avoids downloading a package that's already been installed on the machine. Der globale Paketordner ermöglicht es mehreren Projekten, das gleiche installierte Paket gemeinsam zu nutzen, wodurch insgesamt der Speicherbedarf von NuGet auf dem Computer verringert wird.The global packages folder allows multiple projects to share the same installed package, thereby reducing NuGet's overall footprint on the computer. Der Cache und der globale Paketordner sind sehr hilfreich, wenn Sie häufig eine größere Anzahl von Paketen wiederherstellen, wie z.B. auf einem Buildserver.The cache and global packages folder are also very helpful when you're frequently restoring a larger number of packages, as on a build server. Weitere Informationen zu diesen Mechanismen finden Sie unter Verwalten der globalen Paketordner und Cacheordner.For more details on these mechanisms, see Managing the global packages and cache folders.

Innerhalb eines individuellen Projekts verwaltet NuGet den gesamten Abhängigkeitsdiagramm, was die Auflösung mehrerer Verweise auf verschiedene Versionen des selben Pakets enthält.Within an individual project, NuGet manages the overall dependency graph, which again includes resolving multiple references to different versions of the same package. Es ist üblich, dass ein Projekt eine Abhängigkeit von ein oder mehreren Paketen annimmt, die über die gleichen Abhängigkeiten verfügen.It's quite common that a project takes a dependency on one or more packages that themselves have the same dependencies. Einige der nützlichsten Hilfsprogrammpakete auf nuget.org werden von vielen anderen Paketen verwendet.Some of the most useful utility packages on nuget.org are employed by many other packages. Im gesamten Abhängigkeitsdiagramm, können dann sehr leicht zehn unterschiedliche Verweise auf verschiedene Versionen desselben Pakets vorkommen.In the entire dependency graph, then, you could easily have ten different references to different versions of the same package. NuGet sortiert aus, welche Version von allen Verbrauchern verwendet werden kann, um zu verhindern, dass mehrere Versionen eines Pakets in die Anwendung selbst platziert werden.To avoid bringing multiple versions of that package into the application itself, NuGet sorts out which single version can be used by all consumers. (Weitere Informationen finden Sie unter Auflösung von Abhängigkeiten.)(For more information, see Dependency Resolution.)

Darüber hinaus behält NuGet alle Spezifikationen im Zusammenhang mit der Struktur von Paketen (einschließlich Lokalisierung und Debugsymbole) und wie auf sie verwiesen wird (einschließlich Versionsbereiche und Vorabversionen.) NuGet stellt auch verschiedene APIs für die programmgesteuerte Arbeit mit seinen Diensten bereit und unterstützt Entwickler, die Visual Studio-Erweiterungen und Projektvorlagen.Beyond that, NuGet maintains all the specifications related to how packages are structured (including localization and debug symbols) and how they are referenced (including version ranges and pre-release versions.) NuGet also provides various APIs to work with its services programmatically, and provides support for developers who write Visual Studio extensions and project templates.

Im Inhaltsverzeichnis dieser Dokumentation finden Sie alle hier dargestellten Funktionen und Versionshinweise, die bis zu den Anfängen von NuGet zurückgehen.Take a moment to browse the table of contents for this documentation, and you see all of these capabilities represented there, along with release notes dating back to NuGet's beginnings.

Kommentare, Beiträge und ProblemeComments, contributions, and issues

Abschließend, freuen wir uns auf Kommentare und Beiträge zu dieser Dokumentation — klicken Sie einfach auf die Befehle Feedback und Bearbeiten auf einer beliebigen Seite, oder besuchen Sie das docs-repository oder die docs issue list (docs-Problemliste) auf GitHub.Finally, we very much welcome comments and contributions to this documentation—just select the Feedback and Edit commands on the top of any page, or visit the docs repository and docs issue list on GitHub.

Wir freuen uns auch über Beiträge zu NuGet selbst über seine verschiedenen GitHub-Repositorys. NuGet-Probleme finden Sie auf https://github.com/NuGet/home/issues.We also welcome contributions to NuGet itself through its various GitHub repositories; NuGet issues can be found on https://github.com/NuGet/home/issues.

Viel Vergnügen mit NuGet!Enjoy your NuGet experience!