NuGet pack and restore as MSBuild targets (NuGet-Befehle „pack“ und „restore“ MSBuild-Ziele)NuGet pack and restore as MSBuild targets

NuGet 4.0 und höherNuGet 4.0+

Beim packagereferenzierungsformat kann nuget 4.0 + alle Manifestressourcen direkt in einer Projektdatei speichern, anstatt eine separate .nuspec Datei zu verwenden.With the PackageReference format, NuGet 4.0+ can store all manifest metadata directly within a project file rather than using a separate .nuspec file.

Mit MSBuild 15.1 und höher stellt NuGet auch einen MSBuild-Angehörigen der ersten Klasse mit den Zielen pack und restore dar, wie im Folgenden beschrieben.With MSBuild 15.1+, NuGet is also a first-class MSBuild citizen with the pack and restore targets as described below. Durch diese Ziele können Sie mit NuGet wie mit jeder anderen MSBuild-Task oder jedem anderen MSBuild-Ziel arbeiten.These targets allow you to work with NuGet as you would with any other MSBuild task or target. Anweisungen zum Erstellen eines nuget-Pakets mithilfe von MSBuild finden Sie unter Erstellen eines nuget-Pakets mithilfe von MSBuild.For instructions creating a NuGet package using MSBuild, see Create a NuGet package using MSBuild. (Bei NuGet 3.x und früher verwenden Sie die Befehle pack und restore stattdessen über die NuGet-CLI.)(For NuGet 3.x and earlier, you use the pack and restore commands through the NuGet CLI instead.)

Buildreihenfolge für ZieleTarget build order

Da es sich bei pack und restore um MSBuild-Ziele handelt, können sie zur Verbesserung Ihres Workflows darauf zugreifen.Because pack and restore are MSBuild targets, you can access them to enhance your workflow. Angenommen Sie möchten Ihr Paket nach dem Packen in eine Netzwerkfreigabe kopieren.For example, let’s say you want to copy your package to a network share after packing it. Fügen Sie hierzu Folgendes in Ihrer Projektdatei hinzu:You can do that by adding the following in your project file:

<Target Name="CopyPackage" AfterTargets="Pack">
  <Copy
    SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
    DestinationFolder="\\myshare\packageshare\"
    />
</Target>

Gleichermaßen können Sie eine MSBuild-Task schreiben, Ihr eigenes Ziel schreiben und NuGet-Eigenschaften in der MSBuild-Task verwenden.Similarly, you can write an MSBuild task, write your own target and consume NuGet properties in the MSBuild task.

Hinweis

$(OutputPath) ist relativ und erwartet, dass Sie den Befehl aus dem Projektstamm ausführen.$(OutputPath) is relative and expects that you are running the command from the project root.

Pack-Zielpack target

Für .NET Standard Projekte, die das packagereferenzierungsformat verwenden, zeichnet die Verwendung von msbuild -t:pack Eingaben aus der Projektdatei, die zum Erstellen eines nuget-Pakets verwendet werden.For .NET Standard projects using the PackageReference format, using msbuild -t:pack draws inputs from the project file to use in creating a NuGet package.

In der folgenden Tabelle werden die MSBuild-Eigenschaften beschrieben, die im ersten <PropertyGroup>-Knoten zu einer Projektdatei hinzugefügt werden können.The table below describes the MSBuild properties that can be added to a project file within the first <PropertyGroup> node. Sie können diese Änderungen problemlos in Visual Studio 2017 und höheren Versionen vornehmen, indem Sie mit der rechten Maustaste auf das Projekt klicken und {Project_name} bearbeiten im Kontextmenü auswählen.You can make these edits easily in Visual Studio 2017 and later by right-clicking the project and selecting Edit {project_name} on the context menu. Der Einfachheit halber ist die Tabelle nach der entsprechenden Eigenschaft in einer .nuspec-Datei organisiert.For convenience the table is organized by the equivalent property in a .nuspec file.

Beachten Sie, dass die Eigenschaften Owners und Summary aus einer .nuspec-Datei in MSBuild nicht unterstützt werden.Note that the Owners and Summary properties from .nuspec are not supported with MSBuild.

Attribut/NuSpec-WertAttribute/NuSpec Value MSBuild-EigenschaftMSBuild Property StandardDefault NotizenNotes
IdId PackageIdPackageId AssemblyNameAssemblyName $(AssemblyName) aus MSBuild$(AssemblyName) from MSBuild
VersionVersion PackageVersionPackageVersion VersionVersion Diese Eigenschaft ist mit „semver“ kompatibel, z.B. „1.0.0“, „1.0.0-beta“ oder „1.0.0-beta-00345“This is semver compatible, for example “1.0.0”, “1.0.0-beta”, or “1.0.0-beta-00345”
VersionPrefixVersionPrefix PackageVersionPrefixPackageVersionPrefix emptyempty Durch das Festlegen von PackageVersion wird PackageVersionPrefix überschriebenSetting PackageVersion overwrites PackageVersionPrefix
VersionSuffixVersionSuffix PackageVersionSuffixPackageVersionSuffix emptyempty $(VersionSuffix) aus MSBuild.$(VersionSuffix) from MSBuild. Durch das Festlegen von PackageVersion wird PackageVersionSuffix überschriebenSetting PackageVersion overwrites PackageVersionSuffix
AuthorsAuthors AuthorsAuthors Name des aktuellen BenutzersUsername of the current user
BesitzerOwners N/A In NuSpec nicht vorhandenNot present in NuSpec
TitelTitle TitelTitle Die PackageIdThe PackageId
BESCHREIBUNGDescription BESCHREIBUNGDescription „Paketbeschreibung“"Package Description"
CopyrightCopyright CopyrightCopyright emptyempty
RequireLicenseAcceptanceRequireLicenseAcceptance PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance falsefalse
licenselicense PackageLicenseExpressionPackageLicenseExpression emptyempty Entspricht <license type="expression">Corresponds to <license type="expression">
licenselicense PackageLicenseFilePackageLicenseFile emptyempty Entspricht <license type="file">Corresponds to <license type="file">. Sie müssen die referenzierte Lizenzdatei explizit verpacken.You need to explicitly pack the referenced license file.
LicenseUrlLicenseUrl PackageLicenseUrlPackageLicenseUrl emptyempty PackageLicenseUrl ist veraltet, verwenden Sie die packagelicenseexpression-oder packagelicensefile-Eigenschaft.PackageLicenseUrl is deprecated, use the PackageLicenseExpression or PackageLicenseFile property
ProjectUrlProjectUrl PackageProjectUrlPackageProjectUrl emptyempty
SymbolIcon PackageiconPackageIcon emptyempty Sie müssen explizit die Symbolbild Datei, auf die verwiesen wird, verpacken.You need to explicitly pack the referenced icon image file.
IconUrlIconUrl PackageIconUrlPackageIconUrl emptyempty Um das beste kompatible zu erzielen, sollten PackageIconUrl zusätzlich zu PackageIconangegeben werden.For the best downlevel experience, PackageIconUrl should be specified in addition to PackageIcon. Längerfristig werden PackageIconUrl als veraltet markiert.Longer term, PackageIconUrl will be deprecated.
TagsTags PackageTagsPackageTags emptyempty Ziele werden durch Semikolons (;) getrennt.Tags are semi-colon delimited.
ReleaseNotesReleaseNotes PackageReleaseNotesPackageReleaseNotes emptyempty
Repository/URLRepository/Url RepositoryUrlRepositoryUrl emptyempty Die Repository-URL, die zum Klonen oder Abrufen von Quellcode verwendet wird.Repository URL used to clone or retrieve source code. Beispiel: https://github.com/NuGet/NuGet.Client.gitExample: https://github.com/NuGet/NuGet.Client.git
Repository/TypRepository/Type RepositoryTypeRepositoryType emptyempty Der Repository-Typ.Repository type. Beispiele: git, TFS.Examples: git, tfs.
Repository/VerzweigungRepository/Branch RepositoryBranchRepositoryBranch emptyempty Optionale Informationen zum Repository-Branch.Optional repository branch information. RepositoryUrl muss auch angegeben werden, damit diese Eigenschaft eingeschlossen wird.RepositoryUrl must also be specified for this property to be included. Beispiel: Master (nuget 4.7.0 +)Example: master (NuGet 4.7.0+)
Repository/CommitRepository/Commit RepositoryCommitRepositoryCommit emptyempty Optionaler Repositorycommit oder ein Changeset, um anzugeben, für welches Quellpaket die Erstellung erfolgt ist.Optional repository commit or changeset to indicate which source the package was built against. RepositoryUrl muss auch angegeben werden, damit diese Eigenschaft eingeschlossen wird.RepositoryUrl must also be specified for this property to be included. Beispiel: 0e4d1b598f 350 b3dc675018d539114d1328189ef (nuget 4.7.0 +)Example: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+)
PackageTypePackageType <PackageType>DotNetCliTool, 1.0.0.0;Dependency, 2.0.0.0</PackageType>
ZusammenfassungSummary Nicht unterstütztNot supported

Eingaben für das Ziel „pack“pack target inputs

  • IsPackableIsPackable
  • SuppressDependenciesWhenPackingSuppressDependenciesWhenPacking
  • PackageVersionPackageVersion
  • PackageIdPackageId
  • AuthorsAuthors
  • BESCHREIBUNGDescription
  • CopyrightCopyright
  • PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance
  • DevelopmentDependencyDevelopmentDependency
  • PackageLicenseExpressionPackageLicenseExpression
  • PackageLicenseFilePackageLicenseFile
  • PackageLicenseUrlPackageLicenseUrl
  • PackageProjectUrlPackageProjectUrl
  • PackageIconUrlPackageIconUrl
  • PackageReleaseNotesPackageReleaseNotes
  • PackageTagsPackageTags
  • PackageOutputPathPackageOutputPath
  • IncludeSymbolsIncludeSymbols
  • IncludeSourceIncludeSource
  • PackageTypesPackageTypes
  • IsToolIsTool
  • RepositoryUrlRepositoryUrl
  • RepositoryTypeRepositoryType
  • RepositoryBranchRepositoryBranch
  • RepositoryCommitRepositoryCommit
  • NoPackageAnalysisNoPackageAnalysis
  • MinClientVersionMinClientVersion
  • IncludeBuildOutputIncludeBuildOutput
  • IncludeContentInPackIncludeContentInPack
  • BuildOutputTargetFolderBuildOutputTargetFolder
  • ContentTargetFoldersContentTargetFolders
  • NuspecFileNuspecFile
  • NuspecBasePathNuspecBasePath
  • NuspecPropertiesNuspecProperties

Pack-Szenariospack scenarios

Abhängigkeiten unterdrückenSuppress dependencies

Um Paketabhängigkeiten aus generierten nuget-Paketen zu unterdrücken, legen Sie SuppressDependenciesWhenPacking auf true fest, mit dem alle Abhängigkeiten von der generierten nupkg-Datei übersprungen werden können.To suppress package dependencies from generated NuGet package, set SuppressDependenciesWhenPacking to true which will allow skipping all the dependencies from generated nupkg file.

PackageIconUrlPackageIconUrl

PackageIconUrl wird zugunsten der neuen PackageIcon -Eigenschaft als veraltet eingestuft.PackageIconUrl will be deprecated in favor of the new PackageIcon property.

Ab nuget 5,3 & Visual Studio 2019 Version 16,3 wird die NU5048 -Warnung ausgegeben pack, wenn in den Paket Metadaten nur PackageIconUrlangegeben wird.Starting with NuGet 5.3 & Visual Studio 2019 version 16.3, pack will raise NU5048 warning if the package metadata only specifies PackageIconUrl.

PackageiconPackageIcon

Tipp

Sie sollten sowohl PackageIcon als auch PackageIconUrl angeben, um die Abwärtskompatibilität mit Clients und Quellen zu gewährleisten, die PackageIconnoch nicht unterstützen.You should specify both PackageIcon and PackageIconUrl to maintain backward compatibility with clients and sources that do not yet support PackageIcon. Visual Studio unterstützt PackageIcon für Pakete, die in einer zukünftigen Version aus einer Ordner basierten Quelle stammen.Visual Studio will support PackageIcon for packages coming from a folder-based source in a future release.

Packen einer Symbolbild DateiPacking an icon image file

Beim Packen einer Symbolbild Datei müssen Sie PackageIcon-Eigenschaft verwenden, um den Paketpfad relativ zum Stamm des Pakets anzugeben.When packing an icon image file, you need to use PackageIcon property to specify the package path, relative to the root of the package. Außerdem müssen Sie sicherstellen, dass die Datei im Paket enthalten ist.In addition, you need to make sure that the file is included in the package. Die Größe der Bild Datei ist auf 1 MB beschränkt.Image file size is limited to 1 MB. Unterstützte Dateiformate sind JPEG und PNG.Supported file formats include JPEG and PNG. Wir empfehlen eine Bildauflösung von 128 x 128.We recommend an image resolution of 128x128.

Beispiel:For example:

<PropertyGroup>
    ...
    <PackageIcon>icon.png</PackageIcon>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="images\icon.png" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

Paket Symbol Beispiel.Package Icon sample.

Die nuspec-Entsprechung finden Sie in der nuspec-Referenz für das Symbol.For the nuspec equivalent, take a look at nuspec reference for icon.

AusgabeassemblysOutput assemblies

nuget pack kopiert Ausgabedateien mit den Erweiterungen .exe, .dll, .xml, .winmd, .json und .pri.nuget pack copies output files with extensions .exe, .dll, .xml, .winmd, .json, and .pri. Welche Ausgabedateien kopiert werden, hängt davon ab, was MSBuild aus dem Ziel BuiltOutputProjectGroup bereitstellt.The output files that are copied depend on what MSBuild provides from the BuiltOutputProjectGroup target.

Sie können zwei MSBuild-Eigenschaften in Ihrer Projektdatei oder Befehlszeile verwenden, um das Ziel der Ausgabeassemblys zu steuern:There are two MSBuild properties that you can use in your project file or command line to control where output assemblies go:

  • IncludeBuildOutput: Ein boolescher Wert, der bestimmt, ob die Ausgabeassemblys des Builds in das Paket eingeschlossen werden sollten.IncludeBuildOutput: A boolean that determines whether the build output assemblies should be included in the package.
  • BuildOutputTargetFolder: Gibt den Ordner an, in dem die Ausgabeassemblys angeordnet werden sollten.BuildOutputTargetFolder: Specifies the folder in which the output assemblies should be placed. Die Ausgabeassemblys (und andere Ausgabedateien) werden in ihre jeweiligen Frameworkordner kopiert.The output assemblies (and other output files) are copied into their respective framework folders.

PaketverweisePackage references

Siehe Package References in Project Files (Paketverweise in Projektdateien).See Package References in Project Files.

Projekt-zu-Projekt-VerweiseProject to project references

Projekt-zu-Projekt-Verweise gelten standardmäßig als NuGet-Paketverweise, z.B.:Project to project references are considered by default as nuget package references, for example:

<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>

Sie können auf folgende Metadaten zu Ihrem Projektverweis hinzufügen:You can also add the following metadata to your project reference:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

Einschließlich der Inhalte in einem PaketIncluding content in a package

Fügen Sie zusätzliche Metadaten zu dem vorhandenen <Content>-Element hinzu, um Inhalte einzuschließen.To include content, add extra metadata to the existing <Content> item. Standardmäßig werden alle Elemente vom Typ „Content“ in das Paket eingeschlossen, sofern Sie diese Elemente nicht mit Einträgen wie den folgenden überschreiben:By default everything of type "Content" gets included in the package unless you override with entries like the following:

<Content Include="..\win7-x64\libuv.txt">
 <Pack>false</Pack>
</Content>

Standardmäßig werden alle Elemente zum Stammverzeichnis der Ordner content und contentFiles\any\<target_framework> innerhalb eines Pakets hinzugefügt, und die relative Ordnerstruktur wird beibehalten, sofern Sie keinen Paketpfad angeben:By default, everything gets added to the root of the content and contentFiles\any\<target_framework> folder within a package and preserves the relative folder structure, unless you specify a package path:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles\</PackagePath>
</Content>

Wenn Sie alle Ihre Inhalte in nur einen bestimmten Stammordner kopieren möchten (statt in die Ordner content und contentFiles), können Sie die MSBuild-Eigenschaft ContentTargetFolders verwenden, die standardmäßig auf „content;contentFiles“ festgelegt ist, aber auf beliebige andere Ordnernamen festgelegt werden kann.If you want to copy all your content to only a specific root folder(s) (instead of content and contentFiles both), you can use the MSBuild property ContentTargetFolders, which defaults to "content;contentFiles" but can be set to any other folder names. Beachten Sie Folgendes: Wenn Sie in ContentTargetFolders nur „contentFiles“ angeben, werden Dateien unter contentFiles\any\<target_framework> oder contentFiles\<language>\<target_framework> basierend auf buildAction angeordnet.Note that just specifying "contentFiles" in ContentTargetFolders puts files under contentFiles\any\<target_framework> or contentFiles\<language>\<target_framework> based on buildAction.

PackagePath kann eine durch Semikolons (;) getrennte Reihe von Zielpfaden sein.PackagePath can be a semicolon-delimited set of target paths. Durch die Angabe eines leeren Paketpfads würde die Datei zum Stammverzeichnis des Pakets hinzugefügt.Specifying an empty package path would add the file to the root of the package. Im Folgenden wird beispielsweise libuv.txt zucontent\myfiles, content\samples und dem Stammverzeichnis des Pakets hinzugefügt:For example, the following adds libuv.txt to content\myfiles, content\samples, and the package root:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>

Es gibt auch eine MSBuild-Eigenschaft, $(IncludeContentInPack), die standardmäßig auf true festgelegt ist.There is also an MSBuild property $(IncludeContentInPack), which defaults to true. Wenn diese in einem Projekt auf false festgelegt wird, werden die Inhalte aus diesem Projekt nicht in das NuGet-Paket eingeschlossen.If this is set to false on any project, then the content from that project are not included in the nuget package.

Weitere für das Ziel „pack“ spezifische Metadaten, die Sie auf ein beliebiges der oben genannten Elemente festlegen können, enthalten <PackageCopyToOutput> und <PackageFlatten>, die die Werte CopyToOutput und Flatten auf den contentFiles-Eintrag in der ausgegebenen Nuspec-Datei festlegen.Other pack specific metadata that you can set on any of the above items includes <PackageCopyToOutput> and <PackageFlatten> which sets CopyToOutput and Flatten values on the contentFiles entry in the output nuspec.

Hinweis

Die Metadaten <Pack> und <PackagePath> können nicht nur auf Inhaltselemente, sondern auch auf Dateien mit den Buildvorgängen „Compile“, „EmbeddedResource“, „ApplicationDefinition“, „Page“, „Resource“, „SplashScreen“, „DesignData“, „DesignDataWithDesignTimeCreateableTypes“, „CodeAnalysisDictionary“, „AndroidAsset“, „AndroidResource“, „BundleResource“ oder „None“ festgelegt werden.Apart from Content items, the <Pack> and <PackagePath> metadata can also be set on files with a build action of Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource or None.

Damit das Ziel „pack“ bei der Verwendung von Globmustern den Dateinamen an Ihren Paketpfad anhängt, muss Ihr Paketpfad mit dem Ordnertrennzeichen enden. Andernfalls wird der Paketpfad als vollständiger Pfad einschließlich des Dateinamens behandelt.For pack to append the filename to your package path when using globbing patterns, your package path must end with the folder separator character, otherwise the package path is treated as the full path including the file name.

IncludeSymbolsIncludeSymbols

Bei Verwendung von MSBuild -t:pack -p:IncludeSymbols=true werden die entsprechenden .pdb-Dateien zusammen mit anderen Ausgabedateien kopiert (.dll, .exe, .winmd, .xml, .json, .pri).When using MSBuild -t:pack -p:IncludeSymbols=true, the corresponding .pdb files are copied along with other output files (.dll, .exe, .winmd, .xml, .json, .pri). Beachten Sie, dass durch das Festlegen von IncludeSymbols=true ein reguläres Paket und ein Symbolpaket erstellt werden.Note that setting IncludeSymbols=true creates a regular package and a symbols package.

IncludeSourceIncludeSource

Dies ist mit IncludeSymbols identisch. Der einzige Unterschied besteht darin, dass Quelldateien auch zusammen mit .pdb-Dateien kopiert werden.This is the same as IncludeSymbols, except that it copies source files along with .pdb files as well. Alle Dateien vom Typ Compile werden in src\<ProjectName>\ kopiert. Dabei wird die Ordnerstruktur im relativen Pfad im resultierenden Paket beibehalten.All files of type Compile are copied over to src\<ProjectName>\ preserving the relative path folder structure in the resulting package. Gleiches gilt auch für Quelldateien einer beliebigen ProjectReference, bei der TreatAsPackageReference auf false festgelegt ist.The same also happens for source files of any ProjectReference which has TreatAsPackageReference set to false.

Wenn sich eine Datei vom Typ „Compile“ außerhalb des Projektordners befindet, wird sie nur zu src\<ProjectName>\ hinzugefügt.If a file of type Compile, is outside the project folder, then it's just added to src\<ProjectName>\.

Verpacken eines Lizenz Ausdrucks oder einer LizenzdateiPacking a license expression or a license file

Wenn Sie einen Lizenz Ausdruck verwenden, sollte die packagelicenseexpression-Eigenschaft verwendet werden.When using a license expression, the PackageLicenseExpression property should be used. Beispiel für den Lizenz Ausdruck.License expression sample.

<PropertyGroup>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

Erfahren Sie mehr über Lizenz Ausdrücke und Lizenzen, die von NuGet.org akzeptiert werden.Learn more about license expressions and licenses that are accepted by NuGet.org.

Beim Verpacken einer Lizenzdatei müssen Sie den Paketpfad relativ zum Stamm des Pakets mit der packagelicensefile-Eigenschaft angeben.When packing a license file, you need to use PackageLicenseFile property to specify the package path, relative to the root of the package. Außerdem müssen Sie sicherstellen, dass die Datei im Paket enthalten ist.In addition, you need to make sure that the file is included in the package. Beispiel:For example:

<PropertyGroup>
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>

<ItemGroup>
    <None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>

Beispiel für eine Lizenzdatei.License file sample.

IsToolIsTool

Bei Verwendung von MSBuild -t:pack -p:IsTool=true werden alle Ausgabedateien entsprechend den Angaben im Szenario Ausgabeassemblys in den Ordner tools und nicht in den Ordner lib kopiert.When using MSBuild -t:pack -p:IsTool=true, all output files, as specified in the Output Assemblies scenario, are copied to the tools folder instead of the lib folder. Beachten Sie, dass sich dies von einem DotNetCliTool unterscheidet, das durch Festlegen von PackageType in der .csproj-Datei angegeben wird.Note that this is different from a DotNetCliTool which is specified by setting the PackageType in .csproj file.

Packen mit einer .nuspec-DateiPacking using a .nuspec

Es wird empfohlen, stattdessen alle Eigenschaften zu verwenden, die normalerweise in der .nuspec-Datei in der Projektdatei enthalten sind. Sie können jedoch auch eine .nuspec Datei verwenden, um das Projekt zu verpacken.Although it is recommended that you include all the properties that are usually in the .nuspec file in the project file instead, you can choose to use a .nuspec file to pack your project. Bei einem Projekt, das PackageReferencenicht im SDK verwendet, müssen Sie NuGet.Build.Tasks.Pack.targets importieren, damit der Pack-Task ausgeführt werden kann.For a non-SDK-style project that uses PackageReference, you must import NuGet.Build.Tasks.Pack.targets so that the pack task can be executed. Sie müssen das Projekt dennoch wiederherstellen, bevor Sie eine nuspec-Datei packen können.You still need to restore the project before you can pack a nuspec file. (Ein Projekt im SDK-Stil enthält standardmäßig die Paket Ziele.)(An SDK-style project includes the pack targets by default.)

Das Ziel Framework der Projektdatei ist irrelevant und wird beim Packen einer nuspec-Datei nicht verwendet.The target framework of the project file is irrelevant and not used when packing a nuspec. Die folgenden drei MSBuild-Eigenschaften sind für das Packen mit einer .nuspec-Datei relevant:The following three MSBuild properties are relevant to packing using a .nuspec:

  1. NuspecFile: Relativer oder absoluter Pfad zur .nuspec-Datei, der für das Packen verwendet wird.NuspecFile: relative or absolute path to the .nuspec file being used for packing.
  2. NuspecProperties: Durch Semikolons (;) getrennte Liste der Schlüssel/Wert-Paare.NuspecProperties: a semicolon-separated list of key=value pairs. Aufgrund der Funktionsweise der MSBuild-Befehlszeilenanalyse müssen mehrere Eigenschaften wie folgt angegeben werden: -p:NuspecProperties=\"key1=value1;key2=value2\".Due to the way MSBuild command-line parsing works, multiple properties must be specified as follows: -p:NuspecProperties=\"key1=value1;key2=value2\".
  3. NuspecBasePath: Der Basispfad für die .nuspec-Datei.NuspecBasePath: Base path for the .nuspec file.

Wenn Sie Ihr Projekt mithilfe der Datei dotnet.exe packen, verwenden Sie einen Befehl wie den folgenden:If using dotnet.exe to pack your project, use a command like the following:

dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

Wenn Sie Ihr Projekt mithilfe von MSBuild packen, verwenden Sie einen Befehl wie den folgenden:If using MSBuild to pack your project, use a command like the following:

msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

Beachten Sie, dass das Packen einer nuspec-Datei mithilfe von "dotnet. exe" oder MSBuild ebenfalls dazu führt, das Projekt standardmäßig zu erstellen.Please note that packing a nuspec using dotnet.exe or msbuild also leads to building the project by default. Dies lässt sich vermeiden, indem --no-build-Eigenschaft an dotnet. exe übergeben wird. Dies entspricht der Festlegung <NoBuild>true</NoBuild> in der Projektdatei, zusammen mit der Festlegung von <IncludeBuildOutput>false</IncludeBuildOutput> in der Projektdatei.This can be avoided by passing --no-build property to dotnet.exe, which is the equivalent of setting <NoBuild>true</NoBuild> in your project file, along with setting <IncludeBuildOutput>false</IncludeBuildOutput> in the project file.

Ein Beispiel für eine csproj -Datei zum Packen einer nuspec-Datei ist:An example of a .csproj file to pack a nuspec file is:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <NoBuild>true</NoBuild>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <NuspecFile>PATH_TO_NUSPEC_FILE</NuspecFile>
    <NuspecProperties>add nuspec properties here</NuspecProperties>
    <NuspecBasePath>optional to provide</NuspecBasePath>
  </PropertyGroup>
</Project>

Erweiterte Erweiterungs Punkte zum Erstellen eines angepassten PaketsAdvanced extension points to create customized package

Das pack Ziel bietet zwei Erweiterungs Punkte, die im Inneren, zielframeworkspezifischen Build ausgeführt werden.The pack target provides two extension points that run in the inner, target framework specific build. Die Erweiterungs Punkte unterstützen den Inhalt und die Assemblys für das Ziel Framework in ein Paket:The extension points support including target framework specific content and assemblies into a package:

  • TargetsForTfmSpecificBuildOutput Ziel: Verwenden Sie für Dateien im Ordner lib oder einen mit BuildOutputTargetFolderangegebenen Ordner.TargetsForTfmSpecificBuildOutput target: Use for files inside the lib folder or a folder specified using BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackage Ziel: wird für Dateien außerhalb des BuildOutputTargetFolderverwendet.TargetsForTfmSpecificContentInPackage target: Use for files outside the BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutputTargetsForTfmSpecificBuildOutput

Schreiben Sie ein benutzerdefiniertes Ziel, und geben Sie es als Wert der $(TargetsForTfmSpecificBuildOutput)-Eigenschaft an.Write a custom target and specify it as the value of the $(TargetsForTfmSpecificBuildOutput) property. Für alle Dateien, die in die BuildOutputTargetFolder (standardmäßig lib) wechseln müssen, sollte das Ziel diese Dateien in die ItemGroup-BuildOutputInPackage schreiben und die beiden folgenden Metadatenwerte festlegen:For any files that need to go into the BuildOutputTargetFolder (lib by default), the target should write those files into the ItemGroup BuildOutputInPackage and set the following two metadata values:

  • FinalOutputPath: der absolute Pfad der Datei. Wenn keine Angabe erfolgt, wird die Identität verwendet, um den Quellpfad auszuwerten.FinalOutputPath: The absolute path of the file; if not provided, the Identity is used to evaluate source path.
  • TargetPath: (optional) legen Sie fest, wann die Datei in einen Unterordner in lib\<TargetFramework> wechseln muss, z. b. Satellitenassemblys, die sich in ihren jeweiligen Kultur Ordnern befinden.TargetPath: (Optional) Set when the file needs to go into a subfolder within lib\<TargetFramework> , like satellite assemblies that go under their respective culture folders. Der Standardwert ist der Name der Datei.Defaults to the name of the file.

Beispiel:Example:

<PropertyGroup>
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>

<Target Name="GetMyPackageFiles">
  <ItemGroup>
    <BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
        <TargetPath>cs</TargetPath>
    </BuildOutputInPackage>
  </ItemGroup>
</Target>

TargetsForTfmSpecificContentInPackageTargetsForTfmSpecificContentInPackage

Schreiben Sie ein benutzerdefiniertes Ziel, und geben Sie es als Wert der $(TargetsForTfmSpecificContentInPackage)-Eigenschaft an.Write a custom target and specify it as the value of the $(TargetsForTfmSpecificContentInPackage) property. Für alle Dateien, die in das Paket eingeschlossen werden sollen, sollte das Ziel diese Dateien in das ItemGroup-TfmSpecificPackageFile schreiben und die folgenden optionalen Metadaten festlegen:For any files to include in the package, the target should write those files into the ItemGroup TfmSpecificPackageFile and set the following optional metadata:

  • PackagePath: der Pfad, in den die Datei im Paket ausgegeben werden soll.PackagePath: Path where the file should be output in the package. Nuget gibt eine Warnung aus, wenn demselben Paketpfad mehr als eine Datei hinzugefügt wird.NuGet issues a warning if more than one file is added to the same package path.
  • BuildAction: die Buildaktion, die der Datei zugewiesen werden soll, ist nur erforderlich, wenn sich der Paketpfad im Ordner contentFiles befindet.BuildAction: The build action to assign to the file, required only if the package path is in the contentFiles folder. Der Standardwert ist "None".Defaults to "None".

Beispiel:An example:

<PropertyGroup>
  <TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);CustomContentTarget</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>

<Target Name="CustomContentTarget">
  <ItemGroup>
    <TfmSpecificPackageFile Include="abc.txt">
      <PackagePath>mycontent/$(TargetFramework)</PackagePath>
    </TfmSpecificPackageFile>
    <TfmSpecificPackageFile Include="Extensions/ext.txt" Condition="'$(TargetFramework)' == 'net46'">
      <PackagePath>net46content</PackagePath>
    </TfmSpecificPackageFile>  
  </ItemGroup>
</Target>  

Wiederherstellungszielrestore target

Das Ziel MSBuild -t:restore (das von nuget restore und dotnet restore in .NET Core-Projekten verwendet wird), stellt wie folgt Pakete wieder her, auf die in der Projektdatei verwiesen wird:MSBuild -t:restore (which nuget restore and dotnet restore use with .NET Core projects), restores packages referenced in the project file as follows:

  1. Lesen aller Projekt-zu-Projekt-VerweiseRead all project to project references
  2. Lesen der Projekteigenschaften, um den Zwischenordner und Zielframeworks zu findenRead the project properties to find the intermediate folder and target frameworks
  3. Übergeben von MSBuild-Daten an nuget. Build. Tasks. dllPass MSBuild data to NuGet.Build.Tasks.dll
  4. Ausführen des Befehls „restore“Run restore
  5. Herunterladen von PaketenDownload packages
  6. Schreiben von Assetdatei, Zielen und EigenschaftenWrite assets file, targets, and props

Das restore Ziel funktioniert nur für Projekte, die das packagereferenzierungsformat verwenden.The restore target works only for projects using the PackageReference format. Es funktioniert nicht für Projekte, die das packages.config Format verwenden; verwenden Sie stattdessen die nuget-Wiederherstellung .It does not work for projects using the packages.config format; use nuget restore instead.

Wiederherstellen von EigenschaftenRestore properties

Weitere Wiederherstellungseigenschaften können aus MSBuild-Eigenschaften in der Projektdatei stammen.Additional restore settings may come from MSBuild properties in the project file. Werte können auch mithilfe des -p:-Switch über die Befehlszeile festgelegt werden (siehe nachfolgende Beispiele).Values can also be set from the command line using the -p: switch (see Examples below).

EigenschaftProperty BESCHREIBUNGDescription
RestoreSourcesRestoreSources Eine durch Semikolons (;) getrennte Liste mit Paketquellen.Semicolon-delimited list of package sources.
RestorePackagesPathRestorePackagesPath Ordnerpfad der Pakete für Benutzer.User packages folder path.
RestoreDisableParallelRestoreDisableParallel Begrenzt Downloads auf jeweils einen Download.Limit downloads to one at a time.
RestoreConfigFileRestoreConfigFile Der Pfad zu einer anzuwendenden Nuget.Config-Datei.Path to a Nuget.Config file to apply.
RestoreNoCacheRestoreNoCache Wenn true, wird die Verwendung von zwischengespeicherten Paketen vermieden.If true, avoids using cached packages. Weitere Informationen finden Sie unter Verwalten der globalen Pakete und Cache Ordner.See Managing the global packages and cache folders.
RestoreIgnoreFailedSourcesRestoreIgnoreFailedSources Wenn „TRUE“ festgelegt ist, werden fehlerhafte oder fehlende Paketquellen ignoriert.If true, ignores failing or missing package sources.
RestorefallbackfoldersRestoreFallbackFolders Fall Back Ordner, die auf die gleiche Weise verwendet werden wie der Ordner "Benutzer Pakete".Fallback folders, used in the same way the user packages folder is used.
RestoreAdditionalProjectSourcesRestoreAdditionalProjectSources Zusätzliche Quellen, die während der Wiederherstellung verwendet werden sollen.Additional sources to use during restore.
RestoreAdditionalProjectFallbackFoldersRestoreAdditionalProjectFallbackFolders Zusätzliche Fall Back Ordner, die während der Wiederherstellung verwendet werden sollen.Additional fallback folders to use during restore.
RestoreAdditionalProjectFallbackFoldersExcludesRestoreAdditionalProjectFallbackFoldersExcludes Schließt die in RestoreAdditionalProjectFallbackFolders angegebenen Fall Back Ordner aus.Excludes fallback folders specified in RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFileRestoreTaskAssemblyFile Pfad zu NuGet.Build.Tasks.dll.Path to NuGet.Build.Tasks.dll.
RestoreGraphProjectInputRestoreGraphProjectInput Durch Semikolons (;) getrennte Liste mit wiederherzustellenden Projekten, die absolute Pfade enthalten sollten.Semicolon-delimited list of projects to restore, which should contain absolute paths.
RestoreUseSkipNonexistentTargetsRestoreUseSkipNonexistentTargets Wenn die Projekte über MSBuild gesammelt werden, wird ermittelt, ob Sie mithilfe der SkipNonexistentTargets Optimierung gesammelt werden.When the projects are collected via MSBuild it determines whether they are collected using the SkipNonexistentTargets optimization. Wenn nicht festgelegt, wird standardmäßig true.When not set, defaults to true. Die Folge ist ein fehlerhafter Verhalten, wenn die Ziele eines Projekts nicht importiert werden können.The consequence is a fail-fast behavior when a project's targets cannot be imported.
MSBuildProjectExtensionsPathMSBuildProjectExtensionsPath Ausgabeordner, standardmäßig auf BaseIntermediateOutputPath und den Ordner obj.Output folder, defaulting to BaseIntermediateOutputPath and the obj folder.
RestoreforceRestoreForce In packagereferenzierungsbasierten Projekten erzwingt, dass alle Abhängigkeiten gelöst werden, auch wenn die letzte Wiederherstellung erfolgreich war.In PackageReference based projects, forces all dependencies to be resolved even if the last restore was successful. Die Angabe dieses Flags ähnelt dem Löschen der project.assets.json Datei.Specifying this flag is similar to deleting the project.assets.json file. Dadurch wird der HTTP-Cache nicht umgangen.This does not bypass the http-cache.
RestorePackagesWithLockFileRestorePackagesWithLockFile Ermöglicht die Verwendung einer Sperrdatei.Opts into the usage of a lock file.
RestoreLockedModeRestoreLockedMode Führen Sie die Wiederherstellung im gesperrten Modus aus.Run restore in locked mode. Dies bedeutet, dass bei der Wiederherstellung die Abhängigkeiten nicht neu ausgewertet werden.This means that restore will not reevaluate the dependencies.
NuGetLockFilePathNuGetLockFilePath Ein benutzerdefinierter Speicherort für die Sperrdatei.A custom location for the lock file. Der Standard Speicherort ist neben dem Projekt und hat den Namen packages.lock.json.The default location is next to the project and is named packages.lock.json.
RestoreForceEvaluateRestoreForceEvaluate Erzwingt die Wiederherstellung, um die Abhängigkeiten neu zu berechnen und die Sperrdatei ohne Warnung zu aktualisieren.Forces restore to recompute the dependencies and update the lock file without any warning.

BeispieleExamples

Befehlszeile:Command line:

msbuild -t:restore -p:RestoreConfigFile=<path>

Projektdatei:Project file:

<PropertyGroup>
    <RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>

Wiederherstellen von AusgabenRestore outputs

Bei der Wiederherstellung werden die folgenden Dateien im obj-Buildordner erstellt:Restore creates the following files in the build obj folder:

DateiFile BESCHREIBUNGDescription
project.assets.json Enthält das Abhängigkeits Diagramm aller Paket Verweise.Contains the dependency graph of all package references.
{projectName}.projectFileExtension.nuget.g.props Verweist auf in Paketen enthaltene MSBuild-EigenschaftenReferences to MSBuild props contained in packages
{projectName}.projectFileExtension.nuget.g.targets Verweist auf in Paketen enthaltene MSBuild-ZieleReferences to MSBuild targets contained in packages

Wiederherstellen und erstellen mit einem MSBuild-BefehlRestoring and building with one MSBuild command

Aufgrund der Tatsache, dass nuget Pakete wiederherstellen kann, von denen MSBuild-Ziele und-Eigenschaften heruntergefahren werden, werden die Wiederherstellungs-und buildauswertungen mit unterschiedlichen globalen Eigenschaften ausgeführt.Due to the fact that NuGet can restore packages that bring down MSBuild targets and props, the restore and build evaluations are run with different global properties. Dies bedeutet, dass Folgendes ein unvorhersehbares und häufig falsches Verhalten hat.This means that the following will have an unpredictable and often incorrect behavior.

msbuild -t:restore,build

Stattdessen wird die empfohlene Vorgehensweise empfohlen:Instead the recommended approach is:

msbuild -t:build -restore

Die gleiche Logik gilt auch für andere Ziele wie build.The same logic applies to other targets similar to build.

PackageTargetFallbackPackageTargetFallback

Das PackageTargetFallback-Element ermöglicht die Angabe eines Satzes von kompatiblen Zielen, die verwendet werden sollen, wenn Pakete wiederhergestellt werden.The PackageTargetFallback element allows you to specify a set of compatible targets to be used when restoring packages. Dies soll ermöglichen, dass Pakete, in denen ein dotnet TxM verwendet wird, mit kompatiblen Paketen funktionieren, in denen kein dotnet TxM deklariert ist.It's designed to allow packages that use a dotnet TxM to work with compatible packages that don't declare a dotnet TxM. Wird in Ihrem Projekt das dotnet TxM verwendet, müssen folglich alle Pakete, zu denen es eine Abhängigkeit gibt, ebenfalls ein .NET TxM haben. Dies trifft nur dann nicht zu, wenn Sie das <PackageTargetFallback>-Element zu Ihrem Projekt hinzufügen, sodass Nicht-dotnet-Plattformen mit dotnet kompatibel sind.That is, if your project uses the dotnet TxM, then all the packages it depends on must also have a dotnet TxM, unless you add the <PackageTargetFallback> to your project in order to allow non-dotnet platforms to be compatible with dotnet.

Wenn im Projekt beispielsweise das netstandard1.6 TxM verwendet wird, und ein abhängiges Paket nur lib/net45/a.dll und lib/portable-net45+win81/a.dll enthält, schlägt die Erstellung des Projekts fehl.For example, if the project is using the netstandard1.6 TxM, and a dependent package contains only lib/net45/a.dll and lib/portable-net45+win81/a.dll, then the project will fail to build. Wenn es sich bei dem, was Sie importieren möchten, um die letzte DLL handelt, können Sie ein PackageTargetFallback-Element wie folgt hinzufügen, um zu sagen, dass die DLL von portable-net45+win81 kompatibel ist:If what you want to bring in is the latter DLL, then you can add a PackageTargetFallback as follows to say that the portable-net45+win81 DLL is compatible:

<PackageTargetFallback Condition="'$(TargetFramework)'=='netstandard1.6'">
    portable-net45+win81
</PackageTargetFallback>

Lassen Sie das Attribut Condition deaktiviert, um einen Fallback für alle Ziele in Ihrem Projekt zu deklarieren.To declare a fallback for all targets in your project, leave off the Condition attribute. Sie können auch alle vorhandenen PackageTargetFallback-Elemente erweitern, indem Sie $(PackageTargetFallback) einschließen, wie im Folgenden dargestellt:You can also extend any existing PackageTargetFallback by including $(PackageTargetFallback) as shown here:

<PackageTargetFallback>
    $(PackageTargetFallback);portable-net45+win81
</PackageTargetFallback >

Ersetzen einer Bibliothek aus einem WiederherstellungsdiagrammReplacing one library from a restore graph

Wenn bei einer Wiederherstellung die falsche Assembly eingebunden wurde, kann diese Paketstandardauswahl ausgeschlossen und durch Ihre eigene Wahl ersetzt werden.If a restore is bringing the wrong assembly, it's possible to exclude that packages default choice, and replace it with your own choice. Schließen Sie zunächst mit einem PackageReference-Element der obersten Ebene alle Objekte aus:First with a top level PackageReference, exclude all assets:

<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
  <ExcludeAssets>All</ExcludeAssets>
</PackageReference>

Fügen Sie als Nächstes Ihren eigenen Verweis zur entsprechenden lokalen Kopie der DLL hinzu:Next, add your own reference to the appropriate local copy of the DLL:

<Reference Include="Newtonsoft.Json.dll" />