So erstellen Sie ein NuGet-Paket mit plattformübergreifenden ToolsHow to Create a NuGet Package with Cross Platform Tools

Hinweis

Nachfolgend einige Befehlszeilenbeispiele unter Unix.The following shows command-line samples using Unix. Der hier gezeigte Befehl dotnet pack funktioniert wie unter Windows.The dotnet pack command as shown here works the same way on Windows.

Bibliotheken sollten für .NET Core 1.0 als NuGet-Pakete verteilt werden.For .NET Core 1.0, libraries are expected to be distributed as NuGet packages. So werden alle .NET Standardbibliotheken verteilt und genutzt.This is in fact how all of the .NET Standard libraries are distributed and consumed. Am einfachsten geht dies mit dem Befehl dotnet pack.This is most easily done with the dotnet pack command.

Stellen Sie sich vor, dass Sie eine fantastische neue Bibliothek geschrieben haben, die Sie über NuGet verteilen möchten.Imagine that you just wrote an awesome new library that you would like to distribute over NuGet. Sie können hierfür ein NuGet-Paket mit plattformübergreifenden Tools erstellen.You can create a NuGet package with cross platform tools to do exactly that! Als Beispiel dient eine Bibliothek namens SuperAwesomeLibrary für netstandard1.0.The following example assumes a library called SuperAwesomeLibrary which targets netstandard1.0.

Wenn Sie transitive Abhängigkeiten haben, das heißt ein Projekt, das von einem anderen Projekt abhängig ist, müssen Sie sicherstellen, dass Pakete für die gesamte Projektmappe mit dem Befehl dotnet restore wiederhergestellt werden, bevor das NuGet-Paket erstellt wird.If you have transitive dependencies; that is, a project which depends on another project, you'll need to make sure to restore packages for your entire solution with the dotnet restore command before creating a NuGet package. Andernfalls wird der Befehl dotnet pack nicht ordnungsgemäß funktionieren.Failing to do so will result in the dotnet pack command to not work properly.

Hinweis

Starting with .NET Core 2.0, you don't have to run dotnet restore because it's run implicitly by all commands, such as dotnet build and dotnet run, that require a restore to occur. It's still a valid command in certain scenarios where doing an explicit restore makes sense, such as continuous integration builds in Visual Studio Team Services or in build systems that need to explicitly control the time at which the restore occurs.

Nachdem Sie sichergestellt haben, dass Pakete wiederhergestellt wurden, können Sie zu dem Verzeichnis navigieren, in dem sich eine Bibliothek befindet:After ensuring packages are restored, you can navigate to the directory where a library lives:

$ cd src/SuperAwesomeLibrary

Anschließend genügt ein einzelner Befehl von der Befehlszeile:Then it's just a single command from the command line:

$ dotnet pack

Ihr Ordner /bin/Debug sieht nun wie folgt aus:Your /bin/Debug folder will now look like this:

$ ls bin/Debug

netstandard1.0/
SuperAwesomeLibrary.1.0.0.nupkg
SuperAwesomeLibrary.1.0.0.symbols.nupkg

Beachten Sie, dass dies ein Paket erzeugt, das debuggt werden kann.Note that this will produce a package which is capable of being debugged. Wenn Sie ein NuGet-Paket mit Release-Binärdateien erstellen möchten, müssen Sie lediglich den Schalter -c/--configuration und das Argument release verwenden.If you want to build a NuGet package with release binaries, all you need to do is add the -c/--configuration switch and use release as the argument.

$ dotnet pack --configuration release

Ihr Ordner /bin hat nun einen Unterordner release mit dem NuGet-Paket und den Release-Binärdateien:Your /bin folder will now have a release folder containing your NuGet package with release binaries:

$ ls bin/release

netstandard1.0/
SuperAwesomeLibrary.1.0.0.nupkg
SuperAwesomeLibrary.1.0.0.symbols.nupkg

Jetzt haben Sie die erforderlichen Dateien zum Veröffentlichen eines NuGet-Pakets.And now you have the necessary files to publish a NuGet package!

Verwechseln Sie nicht dotnet pack mit dotnet publishDon't confuse dotnet pack with dotnet publish

Es ist wichtig zu beachten, dass zu keinem Zeitpunkt der Befehl dotnet publish beteiligt ist.It is important to note that at no point is the dotnet publish command involved. Der Befehl dotnet publish dient der Bereitstellung von Clientanwendungen mit allen Abhängigkeiten im gleichen Paket – nicht für das Generieren eines NuGet-Pakets, das über NuGet verteilt und genutzt wird.The dotnet publish command is for deploying applications with all of their dependencies in the same bundle - not for generating a NuGet package to be distributed and consumed via NuGet.