Commandes pack et restore NuGet comme cibles MSBuildNuGet pack and restore as MSBuild targets

NuGet 4.0+NuGet 4.0+

Avec le format PackageReference , NuGet 4.0 + peut stocker toutes les métadonnées de manifeste directement dans un fichier projet plutôt que .nuspec d’utiliser un fichier séparé.With the PackageReference format, NuGet 4.0+ can store all manifest metadata directly within a project file rather than using a separate .nuspec file.

Avec MSBuild 15.1+, NuGet est également un citoyen MSBuild de première classe avec les cibles pack et restore comme décrit ci-dessous.With MSBuild 15.1+, NuGet is also a first-class MSBuild citizen with the pack and restore targets as described below. Ces cibles vous permettent d’utiliser NuGet comme vous utiliseriez toute autre tâche ou cible MSBuild.These targets allow you to work with NuGet as you would with any other MSBuild task or target. Pour obtenir des instructions sur la création d’un package NuGet à l’aide de MSBuild, consultez créer un package NuGet à l’aide de MSBuild.For instructions creating a NuGet package using MSBuild, see Create a NuGet package using MSBuild. (Pour NuGet 3.x et versions antérieures, vous utilisez les commandes pack et restore via l’interface de ligne de commande NuGet à la place.)(For NuGet 3.x and earlier, you use the pack and restore commands through the NuGet CLI instead.)

Ordre de génération des ciblesTarget build order

Étant donné que pack et restore sont des cibles MSBuild, vous pouvez y accéder pour améliorer votre flux de travail.Because pack and restore are MSBuild targets, you can access them to enhance your workflow. Par exemple, supposons que vous souhaitez copier votre package sur un partage réseau après compression.For example, let’s say you want to copy your package to a network share after packing it. Pour ce faire, ajoutez le code suivant dans votre fichier projet :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>

De même, vous pouvez écrire une tâche MSBuild, écrire votre propre cible et consommer des propriétés NuGet dans la tâche MSBuild.Similarly, you can write an MSBuild task, write your own target and consume NuGet properties in the MSBuild task.

Notes

$(OutputPath)est relatif et s’attend à ce que vous exécutiez la commande à partir de la racine du projet.$(OutputPath) is relative and expects that you are running the command from the project root.

Cible packpack target

Pour les projets .NET standard utilisant le format PackageReference, msbuild -t:pack l’utilisation de dessine des entrées à partir du fichier projet à utiliser lors de la création d’un package NuGet.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.

Le tableau ci-dessous décrit les propriétés MSBuild qui peuvent être ajoutées à un fichier projet au sein du premier nœud <PropertyGroup>.The table below describes the MSBuild properties that can be added to a project file within the first <PropertyGroup> node. Vous pouvez effectuer ces modifications facilement dans Visual Studio 2017 et versions ultérieures en cliquant avec le bouton droit sur le projet et en sélectionnant Modifier {nom_projet} dans le menu contextuel.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. Pour des raisons pratiques, le tableau est organisé selon la propriété équivalente dans un fichier .nuspec.For convenience the table is organized by the equivalent property in a .nuspec file.

Notez que les propriétés Owners et Summary de .nuspec ne sont pas prises en charge avec MSBuild.Note that the Owners and Summary properties from .nuspec are not supported with MSBuild.

Valeur d’attribut/NuSpecAttribute/NuSpec Value Propriété MSBuildMSBuild Property DefaultDefault NotesNotes
IdId PackageIdPackageId AssemblyNameAssemblyName $(AssemblyName) de MSBuild$(AssemblyName) from MSBuild
VersionVersion PackageVersionPackageVersion VersionVersion Compatible avec SemVer, par exemple « 1.0.0 », « version bêta 1.0.0 » ou « version bêta-1.0.0-00345 »This is semver compatible, for example “1.0.0”, “1.0.0-beta”, or “1.0.0-beta-00345”
VersionPrefixVersionPrefix PackageVersionPrefixPackageVersionPrefix videempty La définition de PackageVersion remplace PackageVersionPrefixSetting PackageVersion overwrites PackageVersionPrefix
VersionSuffixVersionSuffix PackageVersionSuffixPackageVersionSuffix videempty $(VersionSuffix) de MSBuild.$(VersionSuffix) from MSBuild. La définition de PackageVersion remplace PackageVersionSuffixSetting PackageVersion overwrites PackageVersionSuffix
AuteursAuthors AuteursAuthors Nom de l’utilisateur actuelUsername of the current user
PropriétairesOwners S.O.N/A Ne figure pas dans NuSpecNot present in NuSpec
TitreTitle TitreTitle PackageIdThe PackageId
DescriptionDescription DescriptionDescription « Description du package »"Package Description"
CopyrightCopyright CopyrightCopyright videempty
RequireLicenseAcceptanceRequireLicenseAcceptance PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance falsefalse
licencelicense PackageLicenseExpressionPackageLicenseExpression videempty Correspond à<license type="expression">Corresponds to <license type="expression">
licencelicense PackageLicenseFilePackageLicenseFile videempty Correspond à <license type="file">.Corresponds to <license type="file">. Vous devrez peut-être compresser explicitement le fichier de licence référencé.You may need to explicitly pack the referenced license file.
LicenseUrlLicenseUrl PackageLicenseUrlPackageLicenseUrl videempty PackageLicenseUrlest déconseillé, utilisez la propriété PackageLicenseExpression ou PackageLicenseFilePackageLicenseUrl is deprecated, use the PackageLicenseExpression or PackageLicenseFile property
ProjectUrlProjectUrl PackageProjectUrlPackageProjectUrl videempty
IcôneIcon PackageIconPackageIcon videempty Vous devrez peut-être compresser explicitement le fichier image icône référencé.You may need to explicitly pack the referenced icon image file.
IconUrlIconUrl PackageIconUrlPackageIconUrl videempty PackageIconUrlest déconseillé, utilisez la propriété PackageIconPackageIconUrl is deprecated, use the PackageIcon property
BalisesTags PackageTagsPackageTags videempty Les balises sont séparées par un point-virgule.Tags are semi-colon delimited.
ReleaseNotesReleaseNotes PackageReleaseNotesPackageReleaseNotes videempty
Référentiel/URLRepository/Url RepositoryUrlRepositoryUrl videempty URL du référentiel utilisée pour cloner ou récupérer le code source.Repository URL used to clone or retrieve source code. Tels https://github.com/NuGet/NuGet.Client.gitExample: https://github.com/NuGet/NuGet.Client.git
Dépôt/typeRepository/Type RepositoryTypeRepositoryType videempty Type de référentiel.Repository type. Exemples : git, tfs.Examples: git, tfs.
Référentiel/brancheRepository/Branch RepositoryBranchRepositoryBranch videempty Informations de branche de référentiel facultatives.Optional repository branch information. RepositoryUrl doit également être spécifié pour que cette propriété soit incluse.RepositoryUrl must also be specified for this property to be included. Exemple : Master (NuGet 4.7.0 +)Example: master (NuGet 4.7.0+)
Dépôt/validationRepository/Commit RepositoryCommitRepositoryCommit videempty Validation ou ensemble de modifications de référentiel facultatif pour indiquer la source à partir de laquelle le package a été généré.Optional repository commit or changeset to indicate which source the package was built against. RepositoryUrl doit également être spécifié pour que cette propriété soit incluse.RepositoryUrl must also be specified for this property to be included. Exemple : 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0 +)Example: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+)
PackageTypePackageType <PackageType>DotNetCliTool, 1.0.0.0;Dependency, 2.0.0.0</PackageType>
RécapitulatifSummary Non pris en chargeNot supported

entrées de cible packpack target inputs

  • IsPackableIsPackable
  • SuppressDependenciesWhenPackingSuppressDependenciesWhenPacking
  • PackageVersionPackageVersion
  • PackageIdPackageId
  • AuteursAuthors
  • DescriptionDescription
  • 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
  • DéterministeDeterministic

Scénarios avec packpack scenarios

Supprimer les dépendancesSuppress dependencies

Pour supprimer les dépendances de package du package NuGet SuppressDependenciesWhenPacking généré true , affectez la valeur à qui autorisera l’ignorance de toutes les dépendances du fichier nupkg généré.To suppress package dependencies from generated NuGet package, set SuppressDependenciesWhenPacking to true which will allow skipping all the dependencies from generated nupkg file.

PackageIconUrlPackageIconUrl

Important

PackageIconUrl est déconseillé.PackageIconUrl is deprecated. Utilisez PackageIcon à la place.Use PackageIcon instead.

Compression d’un fichier image d’icônePacking an icon image file

Lors de la compression d’un fichier image icône, vous devez utiliser la propriété PackageIcon pour spécifier le chemin d’accès au package, relatif à la racine du package.When packing an icon image file, you need to use PackageIcon property to specify the package path, relative to the root of the package. En outre, vous devez vous assurer que le fichier est inclus dans le package.In addition, you need to make sure that the file is included in the package. La taille du fichier image est limitée à 1 Mo.Image file size is limited to 1 MB. Les formats de fichiers pris en charge sont JPEG et PNG.Supported file formats include JPEG and PNG. Nous recommandons une résolution d’image de 64x64.We recommend an image resolution of 64x64.

Par exemple :For example:

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

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

Exemple d’icône de package.Package Icon sample.

Pour l’équivalent NuSpec, consultez la référence NuSpec pour l’icône.For the nuspec equivalent, take a look at nuspec reference for icon.

Assemblys de sortieOutput assemblies

nuget pack copie les fichiers de sortie avec les extensions .exe, .dll, .xml, .winmd, .json et .pri.nuget pack copies output files with extensions .exe, .dll, .xml, .winmd, .json, and .pri. Les fichiers de sortie qui sont copiés dépendent de ce que fournit MSBuild à partir de la cible BuiltOutputProjectGroup.The output files that are copied depend on what MSBuild provides from the BuiltOutputProjectGroup target.

Il existe deux propriétés MSBuild que vous pouvez utiliser dans votre fichier projet ou ligne de commande pour contrôler la destination des assemblys de sortie :There are two MSBuild properties that you can use in your project file or command line to control where output assemblies go:

  • IncludeBuildOutput: Valeur booléenne qui détermine si les assemblys de sortie de génération doivent être inclus dans le package.IncludeBuildOutput: A boolean that determines whether the build output assemblies should be included in the package.
  • BuildOutputTargetFolder: Spécifie le dossier dans lequel les assemblys de sortie doivent être placés.BuildOutputTargetFolder: Specifies the folder in which the output assemblies should be placed. Les assemblys de sortie (et les autres fichiers de sortie) sont copiés dans les dossiers de leur framework respectif.The output assemblies (and other output files) are copied into their respective framework folders.

Références de packagePackage references

Consultez Références de package dans les fichiers projet.See Package References in Project Files.

Références entre projetsProject to project references

Les références entre projets sont considérées par défaut comme des références de package nuget, par exemple :Project to project references are considered by default as nuget package references, for example:

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

Vous pouvez également ajouter les métadonnées suivantes à votre référence de projet :You can also add the following metadata to your project reference:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

DéterministeDeterministic

Lorsque vous MSBuild -t:pack -p:Deterministic=trueutilisez, plusieurs appels de la cible Pack génèrent exactement le même package.When using MSBuild -t:pack -p:Deterministic=true, multiple invocations of the the pack target will generate the exact same package. La sortie de la commande à en-tête pack n’est pas affectée par l’État ambiant de l’ordinateur.The output of the pack command is not affected by the ambient state of the machine. En particulier, les entrées zip sont horodatées en tant que 1980-01-01.Specifically zip entries will be timestamped as 1980-01-01. Pour obtenir un déterminisme complet, les assemblys doivent être générés avec l’option de compilateur correspondante-déterministe.To achieve full determinism, the assemblies should be built with the respective compiler option -deterministic. Il est recommandé de spécifier la propriété déterministe comme suit, afin que le compilateur et NuGet le respecte.It is recommended that you specify the deterministic property like following, so both the compiler and NuGet will respect it.

<PropertyGroup>
  <Deterministic>true</Deterministic>
</PropertyGroup>

Ajout de contenu dans un packageIncluding content in a package

Pour inclure du contenu, ajoutez des métadonnées supplémentaires à l’élément <Content>.To include content, add extra metadata to the existing <Content> item. Par défaut, tous les éléments de type « Contenu » sont inclus dans le package, sauf si vous procédez à un remplacement avec des entrées telles que les suivantes :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>

Par défaut, tous les éléments sont ajoutés à la racine de content et du dossier contentFiles\any\<target_framework> au sein d’un package et la structure de dossier relatif est conservée, sauf si vous spécifiez un chemin de package :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>

Si vous souhaitez copier tout le contenu uniquement vers des dossiers racines spécifiques (et non vers content et contentFiles), vous pouvez utiliser la propriété MSBuild ContentTargetFolders qui a pour valeur par défaut « content;contentFiles », mais peut être définie sur tout autre nom de dossier.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. Notez que le fait de spécifier uniquement « contentFiles » dans ContentTargetFolders place les fichiers sous contentFiles\any\<target_framework> ou contentFiles\<language>\<target_framework> selon buildAction.Note that just specifying "contentFiles" in ContentTargetFolders puts files under contentFiles\any\<target_framework> or contentFiles\<language>\<target_framework> based on buildAction.

PackagePath peut être un ensemble de chemins cibles séparés par un point-virgule.PackagePath can be a semicolon-delimited set of target paths. La spécification d’un chemin de package vide permet d’ajouter le fichier à la racine du package.Specifying an empty package path would add the file to the root of the package. Par exemple, le code suivant ajoute libuv.txt à content\myfiles, content\samples et la racine du package :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>

Il existe également une propriété MSBuild $(IncludeContentInPack) qui a pour valeur par défaut true.There is also an MSBuild property $(IncludeContentInPack), which defaults to true. Si sa valeur est false sur un projet, le contenu de ce projet ne figure pas dans le package nuget.If this is set to false on any project, then the content from that project are not included in the nuget package.

D’autres métadonnées spécifiques à pack que vous pouvez définir sur l’un des éléments ci-dessus incluent <PackageCopyToOutput> et <PackageFlatten> qui définissent les valeurs CopyToOutput et Flatten sur l’entrée contentFiles dans le fichier nuspec de sortie.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.

Notes

Outre les éléments de contenu, les métadonnées <Pack> et <PackagePath> peuvent aussi être définies sur des fichiers avec l’action de génération Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource ou None.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.

Pour que la commande pack ajoute le nom de fichier à votre chemin de package lors de l’utilisation de modèles de globbing, votre chemin doit se terminer par le caractère de séparation de dossier, sinon il est traité comme le chemin complet avec le nom de fichier.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

Quand vous utilisez MSBuild -t:pack -p:IncludeSymbols=true, les fichiers .pdb correspondants sont copiés avec d’autres fichiers de sortie (.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). Notez que la définition IncludeSymbols=true crée un package standard et un package de symboles.Note that setting IncludeSymbols=true creates a regular package and a symbols package.

IncludeSourceIncludeSource

Propriété identique à IncludeSymbols, sauf qu’elle copie également les fichiers sources avec les fichiers .pdb.This is the same as IncludeSymbols, except that it copies source files along with .pdb files as well. Tous les fichiers de type Compile sont copiés vers src\<ProjectName>\ en conservant la structure de dossiers de chemin relatif dans le package obtenu.All files of type Compile are copied over to src\<ProjectName>\ preserving the relative path folder structure in the resulting package. La même situation se produit également pour les fichiers sources de n’importe quel ProjectReference dont TreatAsPackageReference a la valeur false.The same also happens for source files of any ProjectReference which has TreatAsPackageReference set to false.

Si un fichier de type Compile est en dehors du dossier de projet, il est simplement ajouté à src\<ProjectName>\.If a file of type Compile, is outside the project folder, then it's just added to src\<ProjectName>\.

Compression d’une expression de licence ou d’un fichier de licencePacking a license expression or a license file

Lors de l’utilisation d’une expression de licence, la propriété PackageLicenseExpression doit être utilisée.When using a license expression, the PackageLicenseExpression property should be used. Exemple d’expression de licence.License expression sample.

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

En savoir plus sur les expressions de licence et les licences acceptées par NuGet.org.Learn more about license expressions and licenses that are accepted by NuGet.org.

Lors de l’empaquetage d’un fichier de licence, vous devez utiliser la propriété PackageLicenseFile pour spécifier le chemin d’accès au package, relatif à la racine du package.When packing a license file, you need to use PackageLicenseFile property to specify the package path, relative to the root of the package. En outre, vous devez vous assurer que le fichier est inclus dans le package.In addition, you need to make sure that the file is included in the package. Par exemple :For example:

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

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

Exemple de fichier de licence.License file sample.

IsToolIsTool

Lors de l’utilisation de MSBuild -t:pack -p:IsTool=true, tous les fichiers de sortie, comme spécifié dans le scénario Assemblys de sortie, sont copiés dans le dossier tools au lieu du dossier lib.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. Notez que cela est différent d’un DotNetCliTool qui est spécifié en définissant PackageType dans le fichier .csproj.Note that this is different from a DotNetCliTool which is specified by setting the PackageType in .csproj file.

Compression à l’aide d’un fichier .nuspecPacking using a .nuspec

Bien qu’il soit recommandé d’inclure à la place toutes les propriétés qui se .nuspec trouvent généralement dans le fichier du fichier projet, vous pouvez choisir d' .nuspec utiliser un fichier pour compresser votre projet.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. Pour un projet de type non-SDK qui utilise PackageReference, vous devez effectuer NuGet.Build.Tasks.Pack.targets l’importation afin que la tâche Pack puisse être exécutée.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. Vous devez toujours restaurer le projet avant de pouvoir compresser un fichier NuSpec.You still need to restore the project before you can pack a nuspec file. (Un projet de type SDK comprend les cibles Pack par défaut.)(An SDK-style project includes the pack targets by default.)

La version cible du .NET Framework du fichier projet n’est pas pertinente et n’est pas utilisée lors de la compression d’un NuSpec.The target framework of the project file is irrelevant and not used when packing a nuspec. Les trois propriétés MSBuild suivantes sont pertinentes lors de la compression à l’aide d’un fichier .nuspec :The following three MSBuild properties are relevant to packing using a .nuspec:

  1. NuspecFile : chemin relatif ou absolu du fichier .nuspec utilisé pour la compression.NuspecFile: relative or absolute path to the .nuspec file being used for packing.
  2. NuspecProperties : liste de paires clé=valeur séparées par un point-virgule.NuspecProperties: a semicolon-separated list of key=value pairs. En raison du mode de fonctionnement de l’analyse de ligne de commande MSBuild, plusieurs propriétés doivent être spécifiées comme suit : -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: Chemin d’accès de .nuspec base pour le fichier.NuspecBasePath: Base path for the .nuspec file.

Si vous utilisez dotnet.exe pour compresser votre projet, utilisez une commande semblable à la suivante :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> 

Si vous utilisez MSBuild pour compresser votre projet, utilisez une commande semblable à la suivante :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> 

Notez que le compactage d’un NuSpec à l’aide de dotnet. exe ou de MSBuild permet également de générer le projet par défaut.Please note that packing a nuspec using dotnet.exe or msbuild also leads to building the project by default. Cela peut être évité en passant --no-build la propriété à dotnet. exe, qui est l’équivalent du <NoBuild>true</NoBuild> paramètre dans votre fichier projet, ainsi que <IncludeBuildOutput>false</IncludeBuildOutput> le paramètre dans le fichier projet.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.

Voici un exemple de fichier . csproj pour compresser un fichier NuSpec :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>

Points d’extension avancés pour créer un package personnaliséAdvanced extension points to create customized package

La pack cible fournit deux points d’extension qui s’exécutent dans la build interne du Framework cible.The pack target provides two extension points that run in the inner, target framework specific build. Les points d’extension prennent en charge l’inclusion de contenu et d’assemblys spécifiques au Framework cible dans un package :The extension points support including target framework specific content and assemblies into a package:

  • TargetsForTfmSpecificBuildOutputIndicatif Utilisez pour les fichiers contenus lib dans le dossier ou dans un BuildOutputTargetFolderdossier spécifié à l’aide de.TargetsForTfmSpecificBuildOutput target: Use for files inside the lib folder or a folder specified using BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackageIndicatif Utilisez pour les BuildOutputTargetFolderfichiers en dehors de.TargetsForTfmSpecificContentInPackage target: Use for files outside the BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutputTargetsForTfmSpecificBuildOutput

Écrivez une cible personnalisée et spécifiez-la comme valeur de $(TargetsForTfmSpecificBuildOutput) la propriété.Write a custom target and specify it as the value of the $(TargetsForTfmSpecificBuildOutput) property. Pour tous les fichiers qui doivent être placés dans BuildOutputTargetFolder (lib par défaut), la cible doit écrire ces fichiers dans ItemGroup BuildOutputInPackage et définir les deux valeurs de métadonnées suivantes :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: Chemin d’accès absolu du fichier ; s’il n’est pas fourni, l’identité est utilisée pour évaluer le chemin source.FinalOutputPath: The absolute path of the file; if not provided, the Identity is used to evaluate source path.
  • TargetPath: Facultatif Définie lorsque le fichier doit être placé dans un sous-dossier lib\<TargetFramework> au sein de, comme les assemblys satellites qui se trouvent dans leurs dossiers de culture respectifs.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. La valeur par défaut est le nom du fichier.Defaults to the name of the file.

Exemple :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

Écrivez une cible personnalisée et spécifiez-la comme valeur de $(TargetsForTfmSpecificContentInPackage) la propriété.Write a custom target and specify it as the value of the $(TargetsForTfmSpecificContentInPackage) property. Pour tous les fichiers à inclure dans le package, la cible doit écrire ces fichiers dans ItemGroup TfmSpecificPackageFile et définir les métadonnées facultatives suivantes :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: Chemin d’accès où le fichier doit être généré dans le package.PackagePath: Path where the file should be output in the package. NuGet émet un avertissement si plusieurs fichiers sont ajoutés au même chemin d’accès de package.NuGet issues a warning if more than one file is added to the same package path.
  • BuildAction: Action de génération à assigner au fichier, obligatoire uniquement si le chemin d’accès du contentFiles package se trouve dans le dossier.BuildAction: The build action to assign to the file, required only if the package path is in the contentFiles folder. La valeur par défaut est « None ».Defaults to "None".

Exemple :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>  

Cible restorerestore target

MSBuild -t:restore (que nuget restore et dotnet restore utilisent avec les projets .NET Core) restaure les packages référencés dans le fichier projet en effectuant les opérations suivantes :MSBuild -t:restore (which nuget restore and dotnet restore use with .NET Core projects), restores packages referenced in the project file as follows:

  1. Lire toutes les références entre projetsRead all project to project references
  2. Lire les propriétés du projet pour trouver le dossier intermédiaire et les versions cibles de .NET FrameworkRead the project properties to find the intermediate folder and target frameworks
  3. Passer des données MSBuild à NuGet. Build. Tasks. dllPass MSBuild data to NuGet.Build.Tasks.dll
  4. Exécuter la restaurationRun restore
  5. Télécharger les packagesDownload packages
  6. Écrire le fichier de ressources, les cibles et les propriétésWrite assets file, targets, and props

La restore cible fonctionne uniquement pour les projets utilisant le format PackageReference.The restore target works only for projects using the PackageReference format. Il ne fonctionne pas pour les projets qui packages.config utilisent le format ; utilisez la restauration NuGet à la place.It does not work for projects using the packages.config format; use nuget restore instead.

Propriétés de restaurationRestore properties

Des paramètres de restauration supplémentaires peuvent provenir de propriétés MSBuild dans le fichier projet.Additional restore settings may come from MSBuild properties in the project file. Des valeurs peuvent également être définies à partir de la ligne de commande à l’aide du commutateur -p: (consultez Exemples ci-dessous).Values can also be set from the command line using the -p: switch (see Examples below).

PropriétéProperty DescriptionDescription
RestoreSourcesRestoreSources Liste de sources de packages séparées par un point-virgule.Semicolon-delimited list of package sources.
RestorePackagesPathRestorePackagesPath Chemin du dossier de packages de l’utilisateur.User packages folder path.
RestoreDisableParallelRestoreDisableParallel Limite les téléchargements à un à la fois.Limit downloads to one at a time.
RestoreConfigFileRestoreConfigFile Chemin à un fichier Nuget.Config à appliquer.Path to a Nuget.Config file to apply.
RestoreNoCacheRestoreNoCache Si la valeur est true, évite d’utiliser des packages mis en cache.If true, avoids using cached packages. Consultez gestion des dossiers de packages globaux et de cache.See Managing the global packages and cache folders.
RestoreIgnoreFailedSourcesRestoreIgnoreFailedSources Si la valeur est true, ignore les sources de packages défectueuses ou manquantes.If true, ignores failing or missing package sources.
RestoreFallbackFoldersRestoreFallbackFolders Dossiers de secours, utilisés de la même façon que le dossier des packages de l’utilisateur est utilisé.Fallback folders, used in the same way the user packages folder is used.
RestoreAdditionalProjectSourcesRestoreAdditionalProjectSources Sources supplémentaires à utiliser pendant la restauration.Additional sources to use during restore.
RestoreAdditionalProjectFallbackFoldersRestoreAdditionalProjectFallbackFolders Dossiers de secours supplémentaires à utiliser lors de la restauration.Additional fallback folders to use during restore.
RestoreAdditionalProjectFallbackFoldersExcludesRestoreAdditionalProjectFallbackFoldersExcludes Exclut les dossiers de secours spécifiés dansRestoreAdditionalProjectFallbackFoldersExcludes fallback folders specified in RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFileRestoreTaskAssemblyFile Chemin d’accès à NuGet.Build.Tasks.dll.Path to NuGet.Build.Tasks.dll.
RestoreGraphProjectInputRestoreGraphProjectInput Liste de projets à restaurer séparés par un point-virgule, qui doit contenir des chemins absolus.Semicolon-delimited list of projects to restore, which should contain absolute paths.
RestoreUseSkipNonexistentTargetsRestoreUseSkipNonexistentTargets Lorsque les projets sont collectés via MSBuild, il détermine s’ils sont collectés à l’aide de l' SkipNonexistentTargets optimisation.When the projects are collected via MSBuild it determines whether they are collected using the SkipNonexistentTargets optimization. Si la valeur n’est pas définie true, la valeur par défaut est.When not set, defaults to true. La conséquence est un comportement de basculement rapide lorsque les cibles d’un projet ne peuvent pas être importées.The consequence is a fail-fast behavior when a project's targets cannot be imported.
MSBuildProjectExtensionsPathMSBuildProjectExtensionsPath Dossier de sortie, avec BaseIntermediateOutputPath comme valeur par défaut et le obj dossier.Output folder, defaulting to BaseIntermediateOutputPath and the obj folder.

ExemplesExamples

Ligne de commande :Command line:

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

Fichier projet :Project file:

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

Sorties de restaurationRestore outputs

La restauration crée les fichiers suivants dans le dossier obj de build :Restore creates the following files in the build obj folder:

FichierFile DescriptionDescription
project.assets.json Contient le graphique de dépendance de toutes les références de package.Contains the dependency graph of all package references.
{projectName}.projectFileExtension.nuget.g.props Références à des propriétés MSBuild contenues dans des packagesReferences to MSBuild props contained in packages
{projectName}.projectFileExtension.nuget.g.targets Références à des cibles MSBuild contenues dans des packagesReferences to MSBuild targets contained in packages

Restauration et génération à l’aide d’une commande MSBuildRestoring and building with one MSBuild command

En raison du fait que NuGet peut restaurer des packages qui déplacent des cibles et des props MSBuild, les évaluations de la restauration et de la build sont exécutées avec des propriétés globales différentes.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. Cela signifie que les éléments suivants auront un comportement imprévisible et souvent incorrect.This means that the following will have an unpredictable and often incorrect behavior.

msbuild -t:restore,build

Au lieu de cela, l’approche recommandée est la suivante :Instead the recommended approach is:

msbuild -t:build -restore

La même logique s’applique à d’autres cibles buildsimilaires à celles de.The same logic applies to other targets similar to build.

PackageTargetFallbackPackageTargetFallback

L’élément PackageTargetFallback vous permet de spécifier un jeu de cibles compatibles à utiliser lors de la restauration des packages.The PackageTargetFallback element allows you to specify a set of compatible targets to be used when restoring packages. Il est conçu pour permettre aux packages qui utilisent un moniker du Framework cible dotnet de fonctionner avec des packages compatibles qui ne déclarent pas de moniker du Framework cible dotnet.It's designed to allow packages that use a dotnet TxM to work with compatible packages that don't declare a dotnet TxM. Autrement dit, si votre projet utilise le moniker du Framework cible dotnet, tous les packages dont il dépend doivent également avoir un moniker du Framework cible dotnet, sauf si vous ajoutez <PackageTargetFallback> à votre projet pour permettre aux plateformes autres que dotnet d’être compatibles avec dotnet.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.

Par exemple, si le projet utilise le moniker du Framework cible netstandard1.6 et qu’un package dépendant ne contient que lib/net45/a.dll et lib/portable-net45+win81/a.dll, la génération du projet échoue.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. Si vous souhaitez présenter la dernière DLL, vous pouvez ajouter un PackageTargetFallback comme suit pour dire que la DLL portable-net45+win81 est compatible :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>

Pour déclarer une solution de secours pour toutes les cibles de votre projet, omettez l’attribut Condition.To declare a fallback for all targets in your project, leave off the Condition attribute. Vous pouvez également étendre tout PackageTargetFallback en incluant $(PackageTargetFallback) comme indiqué ici :You can also extend any existing PackageTargetFallback by including $(PackageTargetFallback) as shown here:

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

Remplacement d’une bibliothèque à partir d’un graphique de restaurationReplacing one library from a restore graph

Si une restauration présente un assembly incorrect, il est possible d’exclure cette option par défaut de package et de la remplacer par votre propre choix.If a restore is bringing the wrong assembly, it's possible to exclude that packages default choice, and replace it with your own choice. Commencez par exclure toutes les ressources avec un PackageReference de niveau supérieur :First with a top level PackageReference, exclude all assets:

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

Ajoutez ensuite votre propre référence à la copie locale appropriée de la DLL :Next, add your own reference to the appropriate local copy of the DLL:

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