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+

Mit dem PackageReference-Format kann NuGet 4.0 (und höher) alle Manifestmetadaten 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. (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.

Pack-Zielpack target

Für .NET Standard Projekte, die das packagereferenzierungsformat verwenden, zeichnet mithilfe msbuild -t:pack von Eingaben aus der Projektdatei, die beim Erstellen eines nuget-Pakets verwendet werden sollen.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 DefaultDefault HinweiseNotes
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 Leerempty Durch das Festlegen von PackageVersion wird PackageVersionPrefix überschriebenSetting PackageVersion overwrites PackageVersionPrefix
VersionSuffixVersionSuffix PackageVersionSuffixPackageVersionSuffix Leerempty $(VersionSuffix) aus MSBuild.$(VersionSuffix) from MSBuild. Durch das Festlegen von PackageVersion wird PackageVersionSuffix überschriebenSetting PackageVersion overwrites PackageVersionSuffix
AutorenAuthors AutorenAuthors Name des aktuellen BenutzersUsername of the current user
BesitzerOwners N/VN/A In NuSpec nicht vorhandenNot present in NuSpec
TitelTitle TitelTitle Die PackageIdThe PackageId
BeschreibungDescription BeschreibungDescription „Paketbeschreibung“"Package Description"
CopyrightCopyright CopyrightCopyright Leerempty
RequireLicenseAcceptanceRequireLicenseAcceptance PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance falsefalse
Führerlicense PackageLicenseExpressionPackageLicenseExpression Leerempty Entspricht<license type="expression">Corresponds to <license type="expression">
Führerlicense PackageLicenseFilePackageLicenseFile Leerempty Entspricht <license type="file">Corresponds to <license type="file">. Möglicherweise müssen Sie explizit die referenzierte Lizenzdatei verpacken.You may need to explicitly pack the referenced license file.
LicenseUrlLicenseUrl PackageLicenseUrlPackageLicenseUrl Leerempty licenseUrlist veraltet, verwenden Sie die packagelicenseexpression-oder packagelicensefile-Eigenschaft.licenseUrl is being deprecated, use the PackageLicenseExpression or PackageLicenseFile property
ProjectUrlProjectUrl PackageProjectUrlPackageProjectUrl Leerempty
IconUrlIconUrl PackageIconUrlPackageIconUrl Leerempty
TagsTags PackageTagsPackageTags Leerempty Ziele werden durch Semikolons (;) getrennt.Tags are semi-colon delimited.
ReleaseNotesReleaseNotes PackageReleaseNotesPackageReleaseNotes Leerempty
Repository/URLRepository/Url RepositoryUrlRepositoryUrl Leerempty 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 Leerempty Der Repository-Typ.Repository type. Beispiele: git, TFS.Examples: git, tfs.
Repository/VerzweigungRepository/Branch RepositoryBranchRepositoryBranch Leerempty 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 Leerempty Optionaler Commit oder Changeset, um anzugeben, für welche Quelle das Paket erstellt wurde.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
  • AutorenAuthors
  • 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 dem generierten nuget-Paket zu SuppressDependenciesWhenPacking unter true drücken, legen Sie auf fest. Dadurch können alle Abhängigkeiten von der generierten nupkg-Datei übersprungen werden.To suppress package dependencies from generated NuGet package, set SuppressDependenciesWhenPacking to true which will allow skipping all the dependencies from generated nupkg file.

PackageIconUrlPackageIconUrl

Als Teil der Änderung für das nuget-Problem 352wird letztendlich in PackageIconUrl PackageIconUri geändert und kann ein relativer Pfad zu einer Symbol Datei sein, die im Stammverzeichnis des resultierenden Pakets enthalten ist.As part of the change for NuGet Issue 352, PackageIconUrl will eventually be changed to PackageIconUri and can be relative path to a icon file which will included at the root of the resulting package.

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 buildausgabeassemblys im Paket enthalten sein sollen.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 platziert werden sollen.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 , die normalerweise in der .nuspec -Datei in der Projektdatei enthalten sind, zu verwenden. 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. Für ein Projekt, das nicht im SDK verwendet PackageReferencewird, müssen Sie importieren NuGet.Build.Tasks.Pack.targets , 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: Basispfad für .nuspec die 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 kann vermieden werden, indem --no-build Sie die-Eigenschaft an dotnet. exe übergeben. Dies entspricht <NoBuild>true</NoBuild> der-Einstellung in der Projektdatei und <IncludeBuildOutput>false</IncludeBuildOutput> der-Einstellung 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:

  • TargetsForTfmSpecificBuildOutputSpar Verwenden Sie für Dateien innerhalb lib des Ordners oder eines mit BuildOutputTargetFolderangegebenen Ordners.TargetsForTfmSpecificBuildOutput target: Use for files inside the lib folder or a folder specified using BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackageSpar Verwenden Sie für Dateien außerhalb BuildOutputTargetFoldervon.TargetsForTfmSpecificContentInPackage target: Use for files outside the BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutputTargetsForTfmSpecificBuildOutput

Schreiben Sie ein benutzerdefiniertes Ziel, und geben Sie es $(TargetsForTfmSpecificBuildOutput) als Wert der-Eigenschaft an.Write a custom target and specify it as the value of the $(TargetsForTfmSpecificBuildOutput) property. Für alle Dateien, die in den BuildOutputTargetFolder (standardmäßig lib) wechseln müssen, sollte das Ziel diese Dateien in die ItemGroup BuildOutputInPackage schreiben und die folgenden beiden 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: Optionale lib\<TargetFramework> Wird festgelegt, wenn die Datei in einen Unterordner in wechseln muss, z. b. Satellitenassemblys, die unter den jeweiligen Kultur Ordnern laufen.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 $(TargetsForTfmSpecificContentInPackage) als Wert der-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 die 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 dem 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. Dies ist nur erforderlich, wenn contentFiles sich der Paketpfad im Ordner 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".

Ein 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 in angegebene Fall Back Ordner aus.RestoreAdditionalProjectFallbackFoldersExcludes 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 truestandardmäßig auf festgelegt.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 obj Ordner.Output folder, defaulting to BaseIntermediateOutputPath and the obj folder.

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 für andere Ziele ähnlich 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" />