Erstellen von NuGet-PaketenCreating NuGet packages

Unabhängig davon, welchen Zweck Ihr Paket erfüllt oder welchen Code es enthält, verwenden Sie eines der CLI-Tools (entweder nuget.exe oder dotnet.exe), um diese Funktionalität in einer Komponente zu verpacken, die für andere Entwickler freigegeben und von ihnen verwendet werden kann.No matter what your package does or what code it contains, you use one of the CLI tools, either nuget.exe or dotnet.exe, to package that functionality into a component that can be shared with and used by any number of other developers. Informationen zur Installation von NuGet-CLI-Tools finden Sie unter Installieren von NuGet-Clienttools.To install NuGet CLI tools, see Install NuGet client tools. Beachten Sie, dass Visual Studio nicht automatisch ein CLI-Tool enthält.Note that Visual Studio does not automatically include a CLI tool.

Technisch gesehen ist ein NuGet-Paket eine ZIP-Datei, die mit der .nupkg-Erweiterung umbenannt wurde und deren Inhalt bestimmten Konventionen entspricht.Technically speaking, a NuGet package is just a ZIP file that's been renamed with the .nupkg extension and whose contents match certain conventions. In diesem Thema werden die Schritte zum Erstellen eines Pakets, das diesen Konventionen entspricht, ausführlich beschrieben.This topic describes the detailed process of creating a package that meets those conventions. Eine fokussierte exemplarische Vorgehensweise finden Sie unter Quickstart: Create and Publish a Package (Schnellstart: Erstellen und Veröffentlichen eines Pakets).For a focused walkthrough, refer to Quickstart: create and publish a package.

Das Packen beginnt mit dem kompilierten Code (Assemblys), Symbolen und/oder anderen Dateien, die Sie als Paket übermitteln möchten. Weitere Informationen finden Sie unter Overview and workflow (Übersicht und Workflow).Packaging begins with the compiled code (assemblies), symbols, and/or other files that you want to deliver as a package (see Overview and workflow). Dieser Vorgang wird unabhängig vom Kompilieren oder jeder anderen Methode zum Erstellen der Dateien ausgeführt, die in das Paket einfließen. Sie können die kompilierten Assemblys und Pakete jedoch mithilfe der Informationen in einer Projektdatei kontinuierlich synchronisieren.This process is independent from compiling or otherwise generating the files that go into the package, although you can draw from information in a project file to keep the compiled assemblies and packages in sync.

Hinweis

Dieses Thema gilt für Nicht-SDK-Projekte, in der Regel andere als .NET Core- und .NET Standard-Projekte mit Visual Studio 2017 und höheren Versionen und NuGet 4.0 und höher.This topic applies to non-SDK-style projects, typically projects other than .NET Core and .NET Standard projects using Visual Studio 2017 and higher versions and NuGet 4.0+.

Welche Assemblys sollen gepackt werden?Deciding which assemblies to package

Die meisten allgemeinen Pakete enthalten mindestens eine Assembly, die andere Entwickler in ihren eigenen Projekten verwenden können.Most general-purpose packages contain one or more assemblies that other developers can use in their own projects.

  • Es ist empfehlenswert, in jedem NuGet-Paket eine Assembly zu haben, vorausgesetzt, dass jede Assembly für sich nützlich ist.In general, it's best to have one assembly per NuGet package, provided that each assembly is independently useful. Beispiel: Wenn Utilities.dll von Parser.dll abhängt und Parser.dll für sich allein bereits nützlich ist, dann müssen Sie für jede Datei ein eigenes Paket erstellen.For example, if you have a Utilities.dll that depends on Parser.dll, and Parser.dll is useful on its own, then create one package for each. So können Entwickler Parser.dll unabhängig von Utilities.dll verwenden.Doing so allows developers to use Parser.dll independently of Utilities.dll.

  • Wenn Ihre Bibliothek aus mehreren Assemblys besteht, die für sich allein nicht nützlich sind, können diese in einem Paket zusammengefasst werden.If your library is composed of multiple assemblies that aren't independently useful, then it's fine to combine them into one package. Bleiben wir beim vorherigen Beispiel: Wenn Parser.dll Code enthält, der nur von Utilities.dll verwendet wird, kann Parser.dll in dasselbe Paket eingefügt werden.Using the previous example, if Parser.dll contains code that's used only by Utilities.dll, then it's fine to keep Parser.dll in the same package.

  • Auch Utilities.dll und Utilities.resources.dll können im selben Paket zusammengefasst werden, wenn erstere DLL von der letzteren abhängt und die letztere nicht für sich allein nützlich ist.Similarly, if Utilities.dll depends on Utilities.resources.dll, where again the latter is not useful on its own, then put both in the same package.

Ressourcen hingegen sind ein besonderer Fall.Resources are, in fact, a special case. Wenn ein Paket in einem Projekt installiert wird, fügt NuGet automatisch den DLLs des Pakets Assemblyverweise hinzu. Die Verweise, die mit .resources.dll benannt sind, werden dabei allerdings nicht hinzugefügt, da angenommen wird, dass es sich dabei um lokalisierte Satellitenassemblys handelt. Weitere Informationen finden Sie unter Creating localized NuGet packages (Erstellen lokalisierter NuGet-Pakete).When a package is installed into a project, NuGet automatically adds assembly references to the package's DLLs, excluding those that are named .resources.dll because they are assumed to be localized satellite assemblies (see Creating localized packages). Vermeiden Sie aus diesem Grund die Verwendung von .resources.dll für Dateien, die darüber hinaus wichtigen Paketcode enthalten.For this reason, avoid using .resources.dll for files that otherwise contain essential package code.

Wenn Ihre Bibliothek COM-Interop-Assemblys enthält, führen Sie die zusätzlichen Schritte unter Erstellen von Paketen, die COM-Interop-Assemblys enthalten aus.If your library contains COM interop assemblies, follow additional the guidelines in Authoring packages with COM interop assemblies.

Rolle und Struktur der NUSPEC-DateiThe role and structure of the .nuspec file

Nachdem Sie entschieden haben, welche Dateien gepackt werden sollen, erstellen Sie ein Paketmanifest in einer .nuspec-XML-Datei.Once you know what files you want to package, the next step is creating a package manifest in a .nuspec XML file.

Das Manifest:The manifest:

  1. Beschreibt den Inhalt des Pakets und ist im Paket enthalten.Describes the package's contents and is itself included in the package.
  2. Ist unerlässlich für die Erstellung des Pakets und weist NuGet an, wie das Paket in ein Projekt installiert werden soll.Drives both the creation of the package and instructs NuGet on how to install the package into a project. Das Manifest erkennt z.B. andere Paketabhängigkeiten, sodass NuGet bei der Installation des Hauptpakets auch diese installieren kann.For example, the manifest identifies other package dependencies such that NuGet can also install those dependencies when the main package is installed.
  3. Enthält wie unten beschrieben erforderliche und optionale Eigenschaften.Contains both required and optional properties as described below. Weitere Informationen, einschließlich anderer Eigenschaften, die hier nicht erwähnt werden, finden Sie unter .nuspec reference (NUSPEC-Referenz).For exact details, including other properties not mentioned here, see the .nuspec reference.

Erforderliche Eigenschaften:Required properties:

  • Der Paketbezeichner. Dieser muss im Katalog, der das Paket hostet, eindeutig sein.The package identifier, which must be unique across the gallery that hosts the package.
  • Eine bestimmte Versionsnummer in der Schreibweise Hauptversion.Nebenversion.Patch[-Suffix] , wobei im -Suffix die Vorabversionen angegeben werdenA specific version number in the form Major.Minor.Patch[-Suffix] where -Suffix identifies pre-release versions
  • Der Titel des Pakets, so wie er auf dem Host (z.B. „nuget.org“) angezeigt werden sollteThe package title as it should appear on the host (like nuget.org)
  • Informationen zum Autor und zum BesitzerAuthor and owner information.
  • Eine ausführliche Beschreibung des PaketsA long description of the package.

Allgemeine optionale Eigenschaften:Common optional properties:

  • Anmerkungen zu diesem ReleaseRelease notes
  • CopyrightinformationenCopyright information
  • Eine kurze Beschreibung der Paket-Manager-UI in Visual StudioA short description for the Package Manager UI in Visual Studio
  • Eine Gebietsschema-IDA locale ID
  • Projekt-URLProject URL
  • Eine Lizenz als Ausdruck oder Datei (licenseUrl wird als veraltet markiert. Nutzen Sie das Nuspec-Metadatenelement license)License as an expression or file (licenseUrl is being deprecated, use the license nuspec metadata element)
  • Eine URL für das SymbolAn icon URL
  • Listen der Abhängigkeiten und VerweiseLists of dependencies and references
  • Tags für die KatalogsucheTags that assist in gallery searches

Im folgenden Beispiel sehen Sie eine typische, aber fiktive .nuspec-Datei mit Kommentaren, die die Eigenschaften beschreiben:The following is a typical (but fictitious) .nuspec file, with comments describing the properties:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
    <metadata>
        <!-- The identifier that must be unique within the hosting gallery -->
        <id>Contoso.Utility.UsefulStuff</id>

        <!-- The package version number that is used when resolving dependencies -->
        <version>1.8.3-beta</version>

        <!-- Authors contain text that appears directly on the gallery -->
        <authors>Dejana Tesic, Rajeev Dey</authors>

        <!-- 
            Owners are typically nuget.org identities that allow gallery
            users to easily find other packages by the same owners.  
        -->
        <owners>dejanatc, rjdey</owners>
        
         <!-- Project URL provides a link for the gallery -->
        <projectUrl>http://github.com/contoso/UsefulStuff</projectUrl>

         <!-- License information is displayed on the gallery -->
        <license type="expression">Apache-2.0</license>
        

        <!-- The icon is used in Visual Studio's package manager UI -->
        <iconUrl>http://github.com/contoso/UsefulStuff/nuget_icon.png</iconUrl>

        <!-- 
            If true, this value prompts the user to accept the license when
            installing the package. 
        -->
        <requireLicenseAcceptance>false</requireLicenseAcceptance>

        <!-- Any details about this particular release -->
        <releaseNotes>Bug fixes and performance improvements</releaseNotes>

        <!-- 
            The description can be used in package manager UI. Note that the
            nuget.org gallery uses information you add in the portal. 
        -->
        <description>Core utility functions for web applications</description>

        <!-- Copyright information -->
        <copyright>Copyright ©2016 Contoso Corporation</copyright>

        <!-- Tags appear in the gallery and can be used for tag searches -->
        <tags>web utility http json url parsing</tags>

        <!-- Dependencies are automatically installed when the package is installed -->
        <dependencies>
            <dependency id="Newtonsoft.Json" version="9.0" />
        </dependencies>
    </metadata>

    <!-- A readme.txt to display when the package is installed -->
    <files>
        <file src="readme.txt" target="" />
    </files>
</package>

Weitere Informationen zum Deklarieren von Abhängigkeiten und zum Angeben von Versionsnummern finden Sie unter Package versioning (Paketversionsverwaltung).For details on declaring dependencies and specifying version numbers, see Package versioning. Es ist auch möglich, Ressourcen aus Abhängigkeiten mithilfe der Attribute include und exclude des Elements dependency direkt im Paket verfügbar zu machen.It is also possible to surface assets from dependencies directly in the package by using the include and exclude attributes on the dependency element. Informationen dazu finden Sie unter .nuspec Reference – Dependencies (NUSPEC-Referenz: Abhängigkeiten).See .nuspec Reference - Dependencies.

Da das Manifest im Paket enthalten ist, aus dem es erstellt wurde, finden Sie viele weitere Beispiele in den vorhandenen Paketen.Because the manifest is included in the package created from it, you can find any number of additional examples by examining existing packages. Eine gute Quelle ist z.B. der Ordner global-packages auf Ihrem Computer, der sich mithilfe des folgenden Befehls öffnen lässt:A good source is the global-packages folder on your computer, the location of which is returned by the following command:

nuget locals -list global-packages

Wechseln Sie in einen Ordner unter package\version, kopieren die .nupkg- in eine .zip-Datei, öffnen Sie dann die .zip-Datei, und sehen Sie sich die .nuspec-Datei darin an.Go into any package\version folder, copy the .nupkg file to a .zip file, then open that .zip file and examine the .nuspec within it.

Hinweis

Wenn Sie eine .nuspec-Datei aus einem Visual Studio-Projekt erstellen, enthält das Manifest Tokens, die bei der Paketerstellung durch Informationen aus dem Projekt ersetzt werden.When creating a .nuspec from a Visual Studio project, the manifest contains tokens that are replaced with information from the project when the package is built. Weitere Informationen finden Sie im Abschnitt Aus einem Visual Studio-Projekt.See Creating the .nuspec from a Visual Studio project.

Erstellen der NUSPEC-DateiCreating the .nuspec file

Das Erstellen eines vollständigen Manifests beginnt in der Regel mit einer einfachen .nuspec-Datei, die mithilfe einer der folgenden Methoden generiert wird:Creating a complete manifest typically begins with a basic .nuspec file generated through one of the following methods:

Anschließend bearbeiten Sie die Datei manuell, sodass sie den genauen Inhalt beschreibt, den das letzte Paket enthalten soll.You then edit the file by hand so that it describes the exact content you want in the final package.

Wichtig

Generierte .nuspec-Dateien enthalten Platzhalter. Diese müssen geändert werden, bevor das Paket mit dem Befehl nuget pack erstellt wird,Generated .nuspec files contain placeholders that must be modified before creating the package with the nuget pack command. da dieser fehlschlägt, wenn die .nuspec-Datei Platzhalter enthält.That command fails if the .nuspec contains any placeholders.

Aus einem konventionsbasierten ArbeitsverzeichnisFrom a convention-based working directory

Da ein NuGet-Paket nur eine mit der .nupkg-Erweiterung umbenannte ZIP-Datei ist, ist es oftmals am einfachsten, die gewünschte Ordnerstruktur in Ihrem lokalen Dateisystem und die .nuspec-Datei anschließend direkt aus dieser Struktur zu erstellen.Because a NuGet package is just a ZIP file that's been renamed with the .nupkg extension, it's often easiest to create the folder structure you want on your local file system, then create the .nuspec file directly from that structure. Der Befehl nuget pack fügt dann automatisch alle Dateien in dieser Ordnerstruktur ein (außer den Ordnern, die mit einem . beginnen, sodass private Dateien in der gleichen Struktur bleiben können).The nuget pack command then automatically adds all files in that folder structure (excluding any folders that begin with ., allowing you to keep private files in the same structure).

Der Vorteil dieses Ansatzes ist, dass Sie nicht wie weiter unten in diesem Thema erläutert im Manifest angeben müssen, welche Dateien im Paket enthalten sein sollen.The advantage to this approach is that you don't need to specify in the manifest which files you want to include in the package (as explained later in this topic). Sie können einfach beim Buildprozess die genaue Ordnerstruktur für das Paket erstellen lassen und problemlos weitere Dateien aufnehmen, die andernfalls zu keinem Projekt gehören würden:You can simply have your build process produce the exact folder structure that goes into the package, and you can easily include other files that might not be part of a project otherwise:

  • Inhalt und Quellcode, der in das Zielprojekt eingefügt werden soll.Content and source code that should be injected into the target project.
  • PowerShell-SkriptsPowerShell scripts
  • Transformationen in vorhandene Konfigurations- und Quellcodedateien in einem Projekt.Transformations to existing configuration and source code files in a project.

Die Ordnerkonventionen lauten folgendermaßen:The folder conventions are as follows:

OrdnerFolder BESCHREIBUNGDescription Aktion bei der PaketinstallationAction upon package install
(Stammverzeichnis)(root) Speicherort für „readme.txt“Location for readme.txt In Visual Studio wird die Datei „readme.txt“ im Stammverzeichnis des Pakets angezeigt, wenn das Paket installiert wird.Visual Studio displays a readme.txt file in the package root when the package is installed.
lib/{tfm}lib/{tfm} Assembly- (.dll), Dokumentations- (.xml) und Symboldateien (.pdb) für den angegebenen Zielframeworkmoniker (Target Framework Moniker, TFM)Assembly (.dll), documentation (.xml), and symbol (.pdb) files for the given Target Framework Moniker (TFM) Assemblys werden als Verweise für die Kompilierzeit ebenso wie für die Laufzeit hinzugefügt, und .xml sowie .pdb werden in Projektordner kopiert.Assemblies are added as references for compile as well as runtime; .xml and .pdb copied into project folders. Informationen zum Erstellen von für das Zielframework spezifischen Unterordnern finden Sie unter Supporting multiple .NET framework versions (Unterstützen mehrerer .NET Framework-Versionen).See Supporting multiple target frameworks for creating framework target-specific sub-folders.
ref/{tfm}ref/{tfm} Dateien für Assembly (.dll) und Symbole (.pdb) für den angegebenen Zielframeworkmoniker (Target Framework Moniker, TFM)Assembly (.dll), and symbol (.pdb) files for the given Target Framework Moniker (TFM) Assemblys werden nur als Verweise für die Kompilierzeit hinzugefügt, daher werden keine Daten in den bin-Ordner des Projekts kopiert.Assemblies are added as references only for compile time; So nothing will be copied into project bin folder.
Laufzeitenruntimes Architekturspezifische Assembly- (.dll), Symbol- (.pdb) und native Ressourcendateien (.pri)Architecture-specific assembly (.dll), symbol (.pdb), and native resource (.pri) files Assemblys werden nur als Verweise für die Laufzeit hinzugefügt. Andere Dateien werden in Projektordner kopiert.Assemblies are added as references only for runtime; other files are copied into project folders. Es sollte immer eine entsprechende für AnyCPU spezifische TFM-Assembly im Ordner /ref/{tfm} vorhanden sein, um eine entsprechende Assembly für die Kompilierzeit bereitzustellen.There should always be a corresponding (TFM) AnyCPU specific assembly under /ref/{tfm} folder to provide corresponding compile time assembly. Weitere Informationen finden Sie unter Supporting multiple .NET framework versions (Unterstützen mehrerer .NET Framework-Versionen).See Supporting multiple target frameworks.
Inhaltcontent Beliebige DateienArbitrary files Inhalte werden in das Projektstammverzeichnis kopiert.Contents are copied to the project root. Der Ordner content (Inhalt) entspricht in etwa dem Stammverzeichnis der Zielanwendung, die das Paket letztendlich nutzt.Think of the content folder as the root of the target application that ultimately consumes the package. Damit das Paket dem Ordner /images der Anwendung ein Image hinzufügt, müssen Sie es im Ordner content/images ablegen.To have the package add an image in the application's /images folder, place it in the package's content/images folder.
Buildbuild MSBuild-Dateien .targets und .propsMSBuild .targets and .props files Sie werden automatisch in die Projektdatei oder in project.lock.json (NuGet 3.x und höher) eingefügt.Automatically inserted into the project file or project.lock.json (NuGet 3.x+).
Toolstools PowerShell-Skripts und -Programme, auf die über die Paket-Manager-Konsole zugegriffen werden kannPowershell scripts and programs accessible from the Package Manager Console Der Ordner tools wird nur zur Umgebungsvariable PATH der Paket-Manager-Konsole hinzugefügt, niemals jedoch zu PATH, so wie es für MSBuild beim Erstellen des Projekts festgelegt ist.The tools folder is added to the PATH environment variable for the Package Manager Console only (Specifically, not to the PATH as set for MSBuild when building the project).

Da die Ordnerstruktur beliebig viele Assemblys für beliebig viele Zielframeworks enthalten kann, ist diese Methode für das Erstellen von Paketen erforderlich, die mehrere Frameworks unterstützen.Because your folder structure can contain any number of assemblies for any number of target frameworks, this method is necessary when creating packages that support multiple frameworks.

Sobald Sie die gewünschte Ordnerstruktur eingerichtet haben, führen Sie den folgenden Befehl in diesem Ordner aus, um die .nuspec-Datei zu erstellen:In any case, once you have the desired folder structure in place, run the following command in that folder to create the .nuspec file:

nuget spec

Die generierte .nuspec-Datei enthält wie bereits erwähnt keine expliziten Verweise auf Dateien in der Ordnerstruktur.Again, the generated .nuspec contains no explicit references to files in the folder structure. NuGet schließt bei der Paketerstellung automatisch alle Dateien ein.NuGet automatically includes all files when the package is created. Die Platzhalterwerte müssen jedoch trotzdem noch in anderen Teilen des Manifests bearbeitet werden.You still need to edit placeholder values in other parts of the manifest, however.

Aus einer Assembly-DLLFrom an assembly DLL

Das Erstellen eines Pakets aus einer Assembly ist ein einfacher Vorgang. Dabei können Sie eine .nuspec-Datei aus den Metadaten in der Assembly mithilfe des folgenden Befehls generieren:In the simple case of creating a package from an assembly, you can generate a .nuspec file from the metadata in the assembly using the following command:

nuget spec <assembly-name>.dll

Bei dieser Schreibweise werden einige Platzhalter im Manifest durch bestimmte Werte aus der Assembly ersetzt.Using this form replaces a few placeholders in the manifest with specific values from the assembly. Die Eigenschaft <id> wird beispielsweise auf den Assemblynamen festgelegt und <version> auf die Version.For example, the <id> property is set to the assembly name, and <version> is set to the assembly version. Andere Manifesteigenschaften haben jedoch keine übereinstimmenden Werte in der Assembly und enthalten somit weiterhin Platzhalter.Other properties in the manifest, however, don't have matching values in the assembly and thus still contain placeholders.

Aus einem Visual Studio-ProjektFrom a Visual Studio project

Es empfiehlt sich, eine .nuspec-Datei aus einer .csproj- oder .vbproj-Datei zu erstellen, da auf andere Pakete, die in dieses Projekt installiert wurden, automatisch als Abhängigkeiten verwiesen wird.Creating a .nuspec from a .csproj or .vbproj file is convenient because other packages that have been installed into those project are automatically referenced as dependencies. Verwenden Sie einfach den folgenden Befehl im Ordner der Projektdatei:Simply use the following command in the same folder as the project file:

# Use in a folder containing a project file <project-name>.csproj or <project-name>.vbproj
nuget spec

Die anschließend erstellte <project-name>.nuspec-Datei enthält Tokens, die zur Packzeit durch Werte aus dem Projekt ersetzt werden, einschließlich der Verweise auf alle anderen Pakete, die bereits installiert wurden.The resulting <project-name>.nuspec file contains tokens that are replaced at packaging time with values from the project, including references to any other packages that have already been installed.

Ein Token wird auf beiden Seiten der Projekteigenschaft durch das Symbol $ begrenzt.A token is delimited by $ symbols on both sides of the project property. Wird der Wert <id> auf diese Weise in einem Manifest generiert, wird er in der Regel folgendermaßen angezeigt:For example, the <id> value in a manifest generated in this way typically appears as follows:

<id>$id$</id>

Dieses Token wird zur Packzeit durch den Wert AssemblyName aus der Projektdatei ersetzt.This token is replaced with the AssemblyName value from the project file at packing time. Weitere Informationen zur genauen Zuordnung von Projektwerten und .nuspec-Tokens finden Sie im Abschnitt Replacement tokens (Ersetzungstokens) im Artikel „.nuspec reference“ (NUSPEC-Referenz).For the exact mapping of project values to .nuspec tokens, see the Replacement Tokens reference.

Durch Tokens müssen Sie wichtige Werte wie die Versionsnummer in der .nuspec-Datei nicht mit dem Projekt zusammen aktualisieren.Tokens relieve you from needing to update crucial values like the version number in the .nuspec as you update the project. Sie können die Tokens bei Bedarf jederzeit durch Literalwerte ersetzen.(You can always replace the tokens with literal values, if desired).

Wenn Sie in einem Visual Studio-Projekt arbeiten, haben weitere Packoptionen zur Auswahl. Dies wird weiter unten im Abschnitt Ausführen von „nuget pack“ zum Generieren der NUPKG-Datei beschrieben.Note that there are several additional packaging options available when working from a Visual Studio project, as described in Running nuget pack to generate the .nupkg file later on.

Pakete auf ProjektmappenebeneSolution-level packages

Nur NuGet 2.x. Nicht verfügbar in NuGet 3.0 und höher.NuGet 2.x only. Not available in NuGet 3.0+.

In NuGet 2.x werden Pakete auf Projektmappenebene unterstützt, über die Tools oder zusätzliche Befehle für die Paket-Manager-Konsole installiert werden (der Inhalt des Ordners tools), die jedoch weder Verweise noch Inhalt hinzufügen oder Anpassungen für Projekte in der Projektmappe erstellen.NuGet 2.x supported the notion of a solution-level package that installs tools or additional commands for the Package Manager Console (the contents of the tools folder), but does not add references, content, or build customizations to any projects in the solution. Solche Pakete enthalten keine Dateien in den direkten Ordnern lib, content oder build, und keine der dazugehörigen Abhängigkeiten besitzt Dateien in den jeweiligen lib-, content- oder build-Ordnern.Such packages contain no files in its direct lib, content, or build folders, and none of its dependencies have files in their respective lib, content, or build folders.

NuGet verfolgt installierte Pakete auf Projektmappenebene in einer packages.config-Datei im Ordner .nuget nach, statt in der packages.config-Datei des Projekts.NuGet tracks installed solution-level packages in a packages.config file in the .nuget folder, rather than the project's packages.config file.

Neue Datei mit StandardwertenNew file with default values

Mit dem folgenden Befehl wird ein Standardmanifest mit Platzhaltern erstellt, das gewährleistet, dass Sie mit der richtigen Dateistruktur beginnen:The following command creates a default manifest with placeholders, which ensures you start with the proper file structure:

nuget spec [<package-name>]

Wenn Sie <package-name> weglassen, lautet die Ergebnisdatei Package.nuspec.If you omit <package-name>, the resulting file is Package.nuspec. Wenn Sie einen Namen wie Contoso.Utility.UsefulStuff angeben, lautet die Datei Contoso.Utility.UsefulStuff.nuspec.If you provide a name such as Contoso.Utility.UsefulStuff, the file is Contoso.Utility.UsefulStuff.nuspec.

Die resultierende .nuspec-Datei enthält Platzhalter für Werte wie projectUrl.The resulting .nuspec contains placeholders for values like the projectUrl. Denken Sie daran, die Datei zu bearbeiten, bevor Sie mit ihr die endgültige .nupkg-Datei erstellen.Be sure to edit the file before using it to create the final .nupkg file.

Auswählen eines eindeutigen Paketbezeichners und Festlegen der VersionsnummerChoosing a unique package identifier and setting the version number

Der Paketbezeichner (<id>-Element) und die Versionsnummer (<version>-Element) sind die beiden wichtigsten Werte im Manifest, da sie eindeutig den exakten Code bezeichnen, der im Paket enthalten ist.The package identifier (<id> element) and the version number (<version> element) are the two most important values in the manifest because they uniquely identify the exact code that's contained in the package.

Bewährte Methoden für den Paketbezeichner:Best practices for the package identifier:

  • Eindeutigkeit: Der Bezeichner muss auf „nuget.org“ bzw. in dem Katalog, in dem das Paket gehostet wird, eindeutig sein.Uniqueness: The identifier must be unique across nuget.org or whatever gallery hosts the package. Bevor Sie sich für einen Bezeichner entscheiden, vergewissern Sie sich, dass dieser im entsprechenden Katalog nicht bereits verwendet wird.Before deciding on an identifier, search the applicable gallery to check if the name is already in use. Zur Vermeidung von Konflikten empfiehlt es sich, den Namen Ihres Unternehmens im ersten Teil des Bezeichners zu nutzen, z.B. Contoso..To avoid conflicts, a good pattern is to use your company name as the first part of the identifier, such as Contoso..
  • Namespace-ähnliche Namen: Verwenden Sie Punkte statt Bindestrichen, wie bei der Notation von Namespaces in .NET.Namespace-like names: Follow a pattern similar to namespaces in .NET, using dot notation instead of hyphens. Schreiben Sie z.B. Contoso.Utility.UsefulStuff statt Contoso-Utility-UsefulStuff oder Contoso_Utility_UsefulStuff.For example, use Contoso.Utility.UsefulStuff rather than Contoso-Utility-UsefulStuff or Contoso_Utility_UsefulStuff. Benutzer finden es auch hilfreich, wenn der Paketbezeichner den im Code verwendeten Namespaces entspricht.Consumers also find it helpful when the package identifier matches the namespaces used in the code.
  • Beispielpakete: Wenn Sie ein Paket mit Beispielcode erstellen, das veranschaulicht, wie ein anderes Paket verwendet wird, fügen Sie .Sample als Suffix an den Bezeichner an, z. B. Contoso.Utility.UsefulStuff.Sample.Sample Packages: If you produce a package of sample code that demonstrates how to use another package, attach .Sample as a suffix to the identifier, as in Contoso.Utility.UsefulStuff.Sample. Das Beispielpaket würde natürlich vom anderen Paket abhängen. Verwenden Sie beim Erstellen eines Beispielpakets wie weiter oben beschrieben das konventionsbasierte Arbeitsverzeichnis.(The sample package would of course have a dependency on the other package.) When creating a sample package, use the convention-based working directory method described earlier. Arrangieren Sie den Beispielcode im Ordner content in einem Ordner namens \Samples\<identifier>, z.B. \Samples\Contoso.Utility.UsefulStuff.Sample.In the content folder, arrange the sample code in a folder called \Samples\<identifier> as in \Samples\Contoso.Utility.UsefulStuff.Sample.

Bewährte Methoden für die Paketversion:Best practices for the package version:

  • Legen Sie die Version des Pakets auf die der Bibliothek fest, obwohl dies nicht zwingend erforderlich ist.In general, set the version of the package to match the library, though this is not strictly required. Dies ist sehr einfach, wenn Sie ein Paket, wie zuvor im Abschnitt Welche Assemblys sollen gepackt werden? beschrieben, auf eine einzelne Assembly beschränken.This is a simple matter when you limit a package to a single assembly, as described earlier in Deciding which assemblies to package. Bedenken Sie, dass NuGet sich beim Auflösen der Abhängigkeiten nach den Paketversionen richtet, nicht nach den Assemblyversionen.Overall, remember that NuGet itself deals with package versions when resolving dependencies, not assembly versions.
  • Wenn Sie ein nicht standardmäßiges Versionsschema verwenden, müssen Sie die NuGet-Versionsregeln wie unter Package versioning (Paketversionsverwaltung beschrieben anwenden.When using a non-standard version scheme, be sure to consider the NuGet versioning rules as explained in Package versioning.

Die folgenden kurzen Blogbeiträge enthalten weitere Informationen zur Versionsverwaltung:The following series of brief blog posts are also helpful to understand versioning:

Festlegen eines PakettypsSetting a package type

In NuGet 3.5 und höher können Pakete mit einem bestimmten Pakettyp gekennzeichnet werden, um den vorgesehenen Zweck anzugeben.With NuGet 3.5+, packages can be marked with a specific package type to indicate its intended use. Pakete ohne Typ, einschließlich aller mit früheren Versionen von NuGet erstellten Pakete, haben standardmäßig den Typ Dependency.Packages not marked with a type, including all packages created with earlier versions of NuGet, default to the Dependency type.

  • Pakete mit Typ Dependency fügen Bibliotheken und Anwendungen Build- oder Laufzeitressourcen hinzu und können in jedem Projekttyp installiert werden, wenn sie kompatibel sind.Dependency type packages add build- or run-time assets to libraries and applications, and can be installed in any project type (assuming they are compatible).

  • Pakete mit Typ DotnetCliTool sind Erweiterungen der .NET-CLI und werden über die Befehlszeile aufgerufen.DotnetCliTool type packages are extensions to the .NET CLI and are invoked from the command line. Solche Pakete können nur in .NET Core-Projekten installiert werden und haben keine Auswirkungen auf Wiederherstellungsvorgänge.Such packages can be installed only in .NET Core projects and have no effect on restore operations. Weitere Informationen zu diesen projektspezifischen Erweiterungen finden Sie in der Dokumentation zur .NET Core-Erweiterbarkeit.More details about these per-project extensions are available in the .NET Core extensibility documentation.

  • Pakete des benutzerdefinierten Typs verwenden einen willkürlichen Typbezeichner, der den gleichen Formatierungsregeln wie Paketbezeichner unterliegt.Custom type packages use an arbitrary type identifier that conforms to the same format rules as package IDs. Der NuGet-Paket-Manager in Visual Studio erkennt jedoch nur die Typen Dependency und DotnetCliTool.Any type other than Dependency and DotnetCliTool, however, are not recognized by the NuGet Package Manager in Visual Studio.

Pakettypen werden in der .nuspec-Datei festgelegt.Package types are set in the .nuspec file. Für die Abwärtskompatibilität wird empfohlen, den Dependency-Typ nicht explizit festzulegen und stattdessen NuGet entscheiden zu lassen, wenn kein Typ angegeben ist.It's best for backwards compatibility to not explicitly set the Dependency type and to instead rely on NuGet assuming this type when no type is specified.

  • .nuspec: Geben Sie den Pakettyp innerhalb eines packageTypes\packageType-Knotens unter dem <metadata>-Element an:.nuspec: Indicate the package type within a packageTypes\packageType node under the <metadata> element:

    <?xml version="1.0" encoding="utf-8"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
        <metadata>
        <!-- ... -->
        <packageTypes>
            <packageType name="DotnetCliTool" />
        </packageTypes>
        </metadata>
    </package>
    

Hinzufügen einer Infodatei und anderer DateienAdding a readme and other files

Verwenden Sie den <files>-Knoten in der .nuspec-Datei, die dem <metadata>-Tag folgt, um Dateien, die in das Paket aufgenommen werden sollen, direkt anzugeben:To directly specify files to include in the package, use the <files> node in the .nuspec file, which follows the <metadata> tag:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
    <metadata>
    <!-- ... -->
    </metadata>
    <files>
        <!-- Add a readme -->
        <file src="readme.txt" target="" />

        <!-- Add files from an arbitrary folder that's not necessarily in the project -->
        <file src="..\..\SomeRoot\**\*.*" target="" />
    </files>
</package>

Tipp

Bei einem konventionsbasierten Arbeitsverzeichnis können Sie die Datei „readme.txt“ im Stammverzeichnis des Pakets und andere Inhalte im Ordner content platzieren.When using the convention-based working directory approach, you can place the readme.txt in the package root and other content in the content folder. Dazu sind keine <file>-Elemente im Manifest erforderlich.No <file> elements are necessary in the manifest.

Wenn Sie eine Datei namens readme.txt im Stammverzeichnis des Pakets einschließen, zeigt Visual Studio unmittelbar nach der direkten Installation des Pakets den Inhalt der Datei als Nur-Text an.When you include a file named readme.txt in the package root, Visual Studio displays the contents of that file as plain text immediately after installing the package directly. Für Pakete, die als Abhängigkeiten installiert wurden, werden keine Infodateien angezeigt.(Readme files are not displayed for packages installed as dependencies). Die Infodatei für das Paket „HtmlAgilityPack“ wird z.B. folgendermaßen angezeigt:For example, here's how the readme for the HtmlAgilityPack package appears:

Anzeige einer Infodatei für ein NuGet-Paket nach der Installation

Hinweis

Wenn Sie einen leeren <files>-Knoten in die .nuspec-Datei einschließen, fügt NuGet dem Paket keine weiteren Inhalte außer denen im Ordner lib hinzu.If you include an empty <files> node in the .nuspec file, NuGet doesn't include any other content in the package other than what's in the lib folder.

Einfügen von MSBuild-Eigenschaften und -Zielen in ein PaketIncluding MSBuild props and targets in a package

In einigen Fällen (z.B. beim Ausführen eines benutzerdefinierten Tools oder Prozesses während des Buildvorgangs) sollten Sie benutzerdefinierte Buildziele oder -eigenschaften zu Projekten hinzufügen, die Ihr Paket nutzen.In some cases, you might want to add custom build targets or properties in projects that consume your package, such as running a custom tool or process during build. Platzieren Sie dazu Dateien mit der Schreibweise <package_id>.targets oder <package_id>.props (z.B. Contoso.Utility.UsefulStuff.targets) im \build-Ordner des Projekts.You do this by placing files in the form <package_id>.targets or <package_id>.props (such as Contoso.Utility.UsefulStuff.targets) within the \build folder of the project.

Dateien im \build-Stammverzeichnis gelten als für alle Zielframeworks geeignet.Files in the root \build folder are considered suitable for all target frameworks. Um frameworkspezifische Dateien bereitzustellen, platzieren Sie zuerst Dateien wie die folgenden in den entsprechenden Unterordnern:To provide framework-specific files, first place them within appropriate subfolders, such as the following:

\build
    \netstandard1.4
        \Contoso.Utility.UsefulStuff.props
        \Contoso.Utility.UsefulStuff.targets
    \net462
        \Contoso.Utility.UsefulStuff.props
        \Contoso.Utility.UsefulStuff.targets

Verweisen Sie dann in der .nuspec-Datei im <files>-Knoten auf diese Dateien:Then in the .nuspec file, be sure to refer to these files in the <files> node:

<?xml version="1.0"?>
<package >
    <metadata minClientVersion="2.5">
    <!-- ... -->
    </metadata>
    <files>
        <!-- Include everything in \build -->
        <file src="build\**" target="build" />

        <!-- Other files -->
        <!-- ... -->
    </files>
</package>

Das Einfügen von MSBuild-Eigenschaften und -Zielen in ein Paket wurde mit NuGet 2.5 eingeführt. Daher wird empfohlen, dem Element metadata das minClientVersion="2.5"-Attribut hinzuzufügen, damit die für das Paket erforderliche Mindestversion des NuGet-Clients angegeben wird.Including MSBuild props and targets in a package was introduced with NuGet 2.5, therefore it is recommended to add the minClientVersion="2.5" attribute to the metadata element, to indicate the minimum NuGet client version required to consume the package.

Wenn NuGet ein Paket mit \build-Dateien erstellt, werden der Projektdatei MSBuild-<Import>-Elemente hinzufügt, die auf die .targets- und .props-Dateien zeigen.When NuGet installs a package with \build files, it adds MSBuild <Import> elements in the project file pointing to the .targets and .props files. .props wird oben in der Projektdatei hinzugefügt und .targets ganz unten. Für jedes Zielframework wird ein eigenes bedingtes MSBuild-<Import>-Element hinzugefügt.(.props is added at the top of the project file; .targets is added at the bottom.) A separate conditional MSBuild <Import> element is added for each target framework.

MSBuild-.props- und -.targets-Dateien für frameworkübergreifende Ziele können im Ordner \buildMultiTargeting abgelegt werden.MSBuild .props and .targets files for cross-framework targeting can be placed in the \buildMultiTargeting folder. Bei der Paketinstallation fügt NuGet die entsprechenden <Import>-Elemente in die Projektdatei mit der Bedingung ein, dass das Zielframework nicht festgelegt ist (die MSBuild-Eigenschaft $(TargetFramework) muss leer sein).During package installation, NuGet adds the corresponding <Import> elements to the project file with the condition, that the target framework is not set (the MSBuild property $(TargetFramework) must be empty).

In NuGet 3.x werden Ziele nicht zum Projekt hinzugefügt, sondern über project.lock.json zur Verfügung gestellt.With NuGet 3.x, targets are not added to the project but are instead made available through the project.lock.json.

Erstellen von Paketen, die COM-Interop-Assemblys enthaltenAuthoring packages with COM interop assemblies

Pakete, die COM-Interop-Assemblys enthalten, müssen eine entsprechende Zieledatei enthalten, damit die richtigen EmbedInteropTypes-Metadaten zu Projekten hinzugefügt werden, die das Format „PackageReference“ verwenden.Packages that contain COM interop assemblies must include an appropriate targets file so that the correct EmbedInteropTypes metadata is added to projects using the PackageReference format. Die EmbedInteropTypes-Metadaten sind für alle Assemblys immer FALSE, wenn „PackageReference“ verwendet wird, damit die Zieledatei diese Metadaten explizit hinzufügt.By default, the EmbedInteropTypes metadata is always false for all assemblies when PackageReference is used, so the targets file adds this metadata explicitly. Um Konflikte zu vermeiden, sollte der Name des Ziels eindeutig sein. Verwenden Sie am besten eine Kombination aus dem Paketnamen und der Assembly, die eingebettet wird, und ersetzen Sie {InteropAssemblyName} im folgenden Beispiel durch diesen Wert.To avoid conflicts, the target name should be unique; ideally, use a combination of your package name and the assembly being embedded, replacing the {InteropAssemblyName} in the example below with that value. Ein weiteres Beispiel finden Sie unter NuGet.Samples.Interop.(Also see NuGet.Samples.Interop for an example.)

<Target Name="Embedding**AssemblyName**From**PackageId**" AfterTargets="ResolveReferences" BeforeTargets="FindReferenceAssembliesForReferences">
  <ItemGroup>
    <ReferencePath Condition=" '%(FileName)' == '{InteropAssemblyName}' AND '%(ReferencePath.NuGetPackageId)' == '$(MSBuildThisFileName)' ">
      <EmbedInteropTypes>true</EmbedInteropTypes>
    </ReferencePath>
  </ItemGroup>
</Target>

Hinweis: Wenn Sie das packages.config-Verwaltungsformat verwenden, prüfen NuGet und Visual Studio beim Hinzufügen von Verweisen zu den Assemblys aus Paketen auf COM-Interop-Assemblys und legen EmbedInteropTypes in der Projektdatei auf TRUE fest.Note that when using the packages.config management format, adding references to the assemblies from the packages causes NuGet and Visual Studio to check for COM interop assemblies and set the EmbedInteropTypes to true in the project file. In diesem Fall werden die Ziele überschrieben.In this case the targets are overriden.

Darüber hinaus werden die Buildressourcen standardmäßig nicht transitiv weitergeben.Additionally, by default the build assets do not flow transitively. Pakete, die dieser Beschreibung nach erstellt werden, funktionieren anders, wenn sie als transitive Abhängigkeit aus einem Projekt in einen Projektverweis gezogen werden.Packages authored as described here work differently when they are pulled as a transitive dependency from a project to project reference. Der Paketbenutzer kann die Weiterleitung zulassen, indem er den Standardwert „PrivateAssets“ so ändert, dass „build“ nicht enthalten ist.The package consumer can allow them to flow by modifying the PrivateAssets default value to not include build.

Ausführen von „nuget pack“ zum Generieren der NUPKG-DateiRunning nuget pack to generate the .nupkg file

Wenn Sie eine Assembly oder das konventionsbasierte Arbeitsverzeichnis verwenden, erstellen Sie ein Paket, indem Sie den Befehl nuget pack mit der .nuspec-Datei ausführen und dabei <project-name> durch den bestimmten Dateinamen ersetzen:When using an assembly or the convention-based working directory, create a package by running nuget pack with your .nuspec file, replacing <project-name> with your specific filename:

nuget pack <project-name>.nuspec

Wenn Sie ein Visual Studio-Projekt verwenden, führen Sie nuget pack mit der Projektdatei aus, die automatisch die .nuspec-Datei des Projekts lädt und alle Tokens darin durch die Werte in der Projektdatei ersetzt:When using a Visual Studio project, run nuget pack with your project file, which automatically loads the project's .nuspec file and replaces any tokens within it using values in the project file:

nuget pack <project-name>.csproj

Hinweis

Die direkte Verwendung der Projektdatei ist für die Tokenersetzung erforderlich, da das Projekt die Quelle der Tokenwerte ist.Using the project file directly is necessary for token replacement because the project is the source of the token values. Die Tokenersetzung wird nicht ausgeführt, wenn Sie nuget pack mit einer .nuspec-Datei verwenden.Token replacement does not happen if you use nuget pack with a .nuspec file.

nuget pack schließt auf jeden Fall Ordner aus, die mit einem Punkt beginnen, z.B. .git oder .hg.In all cases, nuget pack excludes folders that start with a period, such as .git or .hg.

NuGet gibt an, ob die .nuspec-Datei Fehler enthält, die korrigiert werden müssen, z.B. nicht geänderte Platzhalterwerte im Manifest.NuGet indicates if there are any errors in the .nuspec file that need correcting, such as forgetting to change placeholder values in the manifest.

Wenn nuget pack erfolgreich ausgeführt wurde, können Sie die erstellte .nupkg-Datei wie in Publishing packages (Veröffentlichen von Paketen) beschrieben in einem geeigneten Katalog veröffentlichen.Once nuget pack succeeds, you have a .nupkg file that you can publish to a suitable gallery as described in Publishing a Package.

Tipp

Wenn Sie sich das erstellte Paket genauer ansehen möchten, öffnen Sie es einfach im Paket-Explorer.A helpful way to examine a package after creating it is to open it in the Package Explorer tool. Dieser stellt den Inhalt des Pakets und das Manifest grafisch dar.This gives you a graphical view of the package contents and its manifest. Sie können die resultierende .nupkg-Datei auch in eine .zip-Datei umbenennen und deren Inhalt direkt prüfen.You can also rename the resulting .nupkg file to a .zip file and explore its contents directly.

Zusätzliche OptionenAdditional options

Sie können nuget pack mit verschiedenen Befehlszeilenparameter verwenden, um z.B. Dateien auszuschließen, die Versionsnummer im Manifest zu überschreiben und den Ausgabeordner zu ändern.You can use various command-line switches with nuget pack to exclude files, override the version number in the manifest, and change the output folder, among other features. Eine vollständige Liste finden Sie in der Referenz zum Packbefehl.For a complete list, refer to the pack command reference.

Folgende Optionen werden beispielsweise häufig in Visual Studio-Projekten verwendet:The following options are a few that are common with Visual Studio projects:

  • Referenzierte Projekte: Wenn das Projekt auf andere verweist, können Sie die referenzierten Projekte mithilfe der Option -IncludeReferencedProjects als Teil des Pakets oder als Abhängigkeiten hinzufügen:Referenced projects: If the project references other projects, you can add the referenced projects as part of the package, or as dependencies, by using the -IncludeReferencedProjects option:

    nuget pack MyProject.csproj -IncludeReferencedProjects
    

    Diese Einschließung ist rekursiv. Wenn also MyProject.csproj auf die Projekte B und C verweist und diese Projekte ihrerseits auf die Projekte D, E und F, dann werden Dateien aus B, C, D, E und F in das Paket aufgenommen.This inclusion process is recursive, so if MyProject.csproj references projects B and C, and those projects reference D, E, and F, then files from B, C, D, E, and F are included in the package.

    Wenn ein referenziertes Projekt selbst eine .nuspec-Datei enthält, fügt NuGet dieses Projekt stattdessen als Abhängigkeit hinzu.If a referenced project includes a .nuspec file of its own, then NuGet adds that referenced project as a dependency instead. Dieses Projekt muss separat gepackt und veröffentlicht werden.You need to package and publish that project separately.

  • Buildkonfiguration: NuGet verwendet die in der Projektdatei festgelegte Standardbuildkonfiguration, üblicherweise Debuggen.Build configuration: By default, NuGet uses the default build configuration set in the project file, typically Debug. Um Dateien aus einer anderen Buildkonfiguration zu packen, z.B. Release, verwenden Sie die Option -properties mit folgender Konfiguration:To pack files from a different build configuration, such as Release, use the -properties option with the configuration:

    nuget pack MyProject.csproj -properties Configuration=Release
    
  • Symbole: Um Symbole einzuschließen, mit denen Benutzer den Paketcode im Debugger schrittweise ausführen können, verwenden Sie die Option -Symbols:Symbols: to include symbols that allow consumers to step through your package code in the debugger, use the -Symbols option:

    nuget pack MyProject.csproj -symbols
    

Testen der PaketinstallationTesting package installation

Vor dem Veröffentlichen eines Pakets testen Sie in der Regel die Installation eines Pakets in einem Projekt.Before publishing a package, you typically want to test the process of installing a package into a project. Diese Tests stellen sicher, dass die erforderlichen Dateien an den richtigen Orten im Projekt installiert werden.The tests make sure that the necessarily files all end up in their correct places in the project.

Installationen lassen sich manuell in Visual Studio oder mithilfe der normalen Paketinstallationsschritte über die Befehlszeile testen.You can test installations manually in Visual Studio or on the command line using the normal package installation steps.

Für automatisierte Tests gehen Sie folgendermaßen vor:For automated testing, the basic process is as follows:

  1. Kopieren Sie die .nupkg-Datei in einen lokalen Ordner.Copy the .nupkg file to a local folder.
  2. Fügen Sie den Ordner mithilfe des nuget sources add -name <name> -source <path>-Befehls den Paketquellen hinzu. Weitere Informationen finden Sie unter sources command (NuGet CLI) (sources-Befehl (NuGet-CLI)).Add the folder to your package sources using the nuget sources add -name <name> -source <path> command (see nuget sources). Diese lokale Quelle muss auf einem Computer nur einmal festgelegt werden.Note that you need only set this local source once on any given computer.
  3. Installieren Sie das Paket aus dieser Quelle mithilfe von nuget install <packageID> -source <name>, wobei <name> dem Namen der Quelle entspricht, so wie er an nuget sources übergeben wurde.Install the package from that source using nuget install <packageID> -source <name> where <name> matches the name of your source as given to nuget sources. Durch das Angeben der Quelle wird sichergestellt, dass das Paket nur aus dieser Quelle installiert wird.Specifying the source ensures that the package is installed from that source alone.
  4. Überprüfen Sie Ihr Dateisystem, um sicherzustellen, dass Dateien richtig installiert wurden.Examine your file system to check that files are installed correctly.

Nächste SchritteNext Steps

Nachdem Sie ein Paket erstellt haben, das eine .nupkg-Datei ist, können Sie sie wie unter Publishing packages (Veröffentlichen von Paketen) beschrieben im Katalog Ihrer Wahl veröffentlichen.Once you've created a package, which is a .nupkg file, you can publish it to the gallery of your choice as described on Publishing a Package.

Sie können auch die Funktionen des Pakets erweitern oder wie in den folgenden Themen beschrieben andere Szenarios unterstützen:You might also want to extend the capabilities of your package or otherwise support other scenarios as described in the following topics:

Außerdem sollten Sie die folgenden zusätzlichen Pakettypen berücksichtigen:Finally, there are additional package types to be aware of: