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 d’utiliser un fichier .nuspec distinct.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, l’utilisation de msbuild -t:pack dessine les entrées 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 emptyempty La définition de PackageVersion remplace PackageVersionPrefixSetting PackageVersion overwrites PackageVersionPrefix
VersionSuffixVersionSuffix PackageVersionSuffixPackageVersionSuffix emptyempty $(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 N/AN/A Ne figure pas dans NuSpecNot present in NuSpec
IntituléTitle IntituléTitle PackageIdThe PackageId
DescriptionDescription DescriptionDescription « Description du package »"Package Description"
copyrightCopyright copyrightCopyright emptyempty
RequireLicenseAcceptanceRequireLicenseAcceptance PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance falsefalse
licenselicense PackageLicenseExpressionPackageLicenseExpression emptyempty Correspond à <license type="expression">Corresponds to <license type="expression">
licenselicense PackageLicenseFilePackageLicenseFile emptyempty Correspond à <license type="file">.Corresponds to <license type="file">. Vous devez explicitement compresser le fichier de licence référencé.You need to explicitly pack the referenced license file.
LicenseUrlLicenseUrl PackageLicenseUrlPackageLicenseUrl emptyempty PackageLicenseUrl est déconseillé, utilisez la propriété PackageLicenseExpression ou PackageLicenseFilePackageLicenseUrl is deprecated, use the PackageLicenseExpression or PackageLicenseFile property
ProjectUrlProjectUrl PackageProjectUrlPackageProjectUrl emptyempty
IcôneIcon PackageIconPackageIcon emptyempty Vous devez explicitement compresser le fichier image icône référencé.You need to explicitly pack the referenced icon image file.
IconUrlIconUrl PackageIconUrlPackageIconUrl emptyempty Pour une expérience optimale, PackageIconUrl doit être spécifié en plus de PackageIcon.For the best downlevel experience, PackageIconUrl should be specified in addition to PackageIcon. À long terme, PackageIconUrl sera dépréciée.Longer term, PackageIconUrl will be deprecated.
BalisesTags PackageTagsPackageTags emptyempty Les balises sont séparées par un point-virgule.Tags are semi-colon delimited.
ReleaseNotesReleaseNotes PackageReleaseNotesPackageReleaseNotes emptyempty
Référentiel/URLRepository/Url RepositoryUrlRepositoryUrl emptyempty 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. Exemple : https://github.com/NuGet/NuGet.Client.gitExample: https://github.com/NuGet/NuGet.Client.git
Dépôt/typeRepository/Type RepositoryTypeRepositoryType emptyempty Type de référentiel.Repository type. Exemples : git, tfs.Examples: git, tfs.
Référentiel/brancheRepository/Branch RepositoryBranchRepositoryBranch emptyempty 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 emptyempty 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ésuméSummary 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

Scénarios avec packpack scenarios

Supprimer les dépendancesSuppress dependencies

Pour supprimer les dépendances de package du package NuGet généré, affectez à SuppressDependenciesWhenPacking la valeur true qui permettra d’ignorer 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

PackageIconUrl sera dépréciée en faveur de la nouvelle propriété PackageIcon .PackageIconUrl will be deprecated in favor of the new PackageIcon property.

À compter de NuGet 5,3 & Visual Studio 2019 version 16,3, pack déclenche l’avertissement NU5048 si les métadonnées de package spécifient uniquement PackageIconUrl.Starting with NuGet 5.3 & Visual Studio 2019 version 16.3, pack will raise NU5048 warning if the package metadata only specifies PackageIconUrl.

PackageIconPackageIcon

Conseil

Vous devez spécifier à la fois PackageIcon et PackageIconUrl pour assurer la compatibilité descendante avec les clients et les sources qui ne prennent pas encore en charge PackageIcon.You should specify both PackageIcon and PackageIconUrl to maintain backward compatibility with clients and sources that do not yet support PackageIcon. Visual Studio prend en charge PackageIcon pour les packages provenant d’une source basée sur des dossiers dans une version ultérieure.Visual Studio will support PackageIcon for packages coming from a folder-based source in a future release.

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 PackageIcon propriété pour spécifier le chemin d’accès du 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 128 x 128.We recommend an image resolution of 128x128.

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>

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 trouvent généralement dans le fichier .nuspec dans le fichier projet, vous pouvez choisir d’utiliser un fichier .nuspec 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 importer NuGet.Build.Tasks.Pack.targets 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 de base pour le fichier .nuspec.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 propriété à dotnet. exe, qui est l’équivalent de la définition des <NoBuild>true</NoBuild> dans votre fichier projet, ainsi que du paramètre <IncludeBuildOutput>false</IncludeBuildOutput> 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 cible pack 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:

  • TargetsForTfmSpecificBuildOutput cible : utilisez pour les fichiers situés dans le dossier lib ou dans un dossier spécifié à l’aide de BuildOutputTargetFolder.TargetsForTfmSpecificBuildOutput target: Use for files inside the lib folder or a folder specified using BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackage cible : à utiliser pour les fichiers en dehors du BuildOutputTargetFolder.TargetsForTfmSpecificContentInPackage target: Use for files outside the BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutputTargetsForTfmSpecificBuildOutput

Écrivez une cible personnalisée et spécifiez-la comme valeur de la propriété $(TargetsForTfmSpecificBuildOutput).Write a custom target and specify it as the value of the $(TargetsForTfmSpecificBuildOutput) property. Pour tous les fichiers qui doivent être placés dans le BuildOutputTargetFolder (lib par défaut), la cible doit écrire ces fichiers dans le 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éfini lorsque le fichier doit être placé dans un sous-dossier au sein de lib\<TargetFramework>, 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 la propriété $(TargetsForTfmSpecificContentInPackage).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 la TfmSpecificPackageFile ItemGroup 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 package se trouve dans le dossier contentFiles.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 cible restore 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 utilisent le format packages.config ; Utilisez à la place la restauration NuGet .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 dans RestoreAdditionalProjectFallbackFoldersExcludes 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’optimisation SkipNonexistentTargets.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, la valeur par défaut est true.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, par défaut, BaseIntermediateOutputPath et le dossier obj.Output folder, defaulting to BaseIntermediateOutputPath and the obj folder.
RestoreForceRestoreForce Dans les projets basés sur PackageReference, force la résolution de toutes les dépendances même si la dernière restauration a réussi.In PackageReference based projects, forces all dependencies to be resolved even if the last restore was successful. La spécification de cet indicateur est semblable à la suppression du fichier project.assets.json.Specifying this flag is similar to deleting the project.assets.json file. Cela ne contourne pas le cache http.This does not bypass the http-cache.
RestorePackagesWithLockFileRestorePackagesWithLockFile Opte pour l’utilisation d’un fichier de verrouillage.Opts into the usage of a lock file.
RestoreLockedModeRestoreLockedMode Exécutez la restauration en mode verrouillé.Run restore in locked mode. Cela signifie que la restauration ne réévaluera pas les dépendances.This means that restore will not reevaluate the dependencies.
NuGetLockFilePathNuGetLockFilePath Emplacement personnalisé pour le fichier de verrouillage.A custom location for the lock file. L’emplacement par défaut est à côté du projet et est nommé packages.lock.json.The default location is next to the project and is named packages.lock.json.
RestoreForceEvaluateRestoreForceEvaluate Force la restauration à recalculer les dépendances et à mettre à jour le fichier de verrouillage sans aucun avertissement.Forces restore to recompute the dependencies and update the lock file without any warning.

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 similaires à build.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" />