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 du manifeste directement dans un fichier projet, au lieu 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 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.

Cible packpack target

Pour les projets .NET Standard en utilisant le format PackageReference, à l’aide de msbuild /t:pack dessine des entrées à partir du fichier de projet à utiliser pour créer 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 Par défautDefault 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 N/AN/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
LicenseUrlLicenseUrl PackageLicenseUrlPackageLicenseUrl videempty
ProjectUrlProjectUrl PackageProjectUrlPackageProjectUrl videempty
IconUrlIconUrl PackageIconUrlPackageIconUrl videempty
BalisesTags PackageTagsPackageTags videempty Les balises sont séparées par un point-virgule.Tags are semi-colon delimited.
ReleaseNotesReleaseNotes PackageReleaseNotesPackageReleaseNotes videempty
Url/du référentielRepository/Url RepositoryUrlRepositoryUrl videempty URL du référentiel utilisé pour cloner ou extraire 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
/ Type de référentielRepository/Type RepositoryTypeRepositoryType videempty Type de référentiel.Repository type. Exemples : git, tfs.Examples: git, tfs.
/ Branche du référentielRepository/Branch RepositoryBranchRepositoryBranch videempty Informations de branche de référentiel facultatif.Optional repository branch information. RepositoryUrl doit également être spécifié pour cette propriété à inclure.RepositoryUrl must also be specified for this property to be included. Exemple : master (4.7.0+ NuGet)Example: master (NuGet 4.7.0+)
Référentiel/validationRepository/Commit RepositoryCommitRepositoryCommit videempty Validation du référentiel facultatif ou l’ensemble de modifications pour indiquer à qui la source du package a été créé.Optional repository commit or changeset to indicate which source the package was built against. RepositoryUrl doit également être spécifié pour cette propriété à inclure.RepositoryUrl must also be specified for this property to be included. Exemple : 0e4d1b598f350b3dc675018d539114d1328189ef (4.7.0+ NuGet)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
  • PackageVersionPackageVersion
  • PackageIdPackageId
  • AuteursAuthors
  • DescriptionDescription
  • CopyrightCopyright
  • PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance
  • DevelopmentDependencyDevelopmentDependency
  • 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

PackageIconUrlPackageIconUrl

Dans le cadre de la modification pour NuGet problème 352, PackageIconUrl sera finalement remplacée par PackageIconUri et peut être un chemin relatif vers un fichier d’icône qui sera inclus à la racine du package obtenu.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.

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.

Note

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>\.

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

Vous pouvez utiliser un .nuspec fichier à compresser votre projet, sous réserve que vous avez un fichier de projet SDK à importer NuGet.Build.Tasks.Pack.targets afin que la tâche pack peut être exécutée.You can use a .nuspec file to pack your project provided that you have a SDK project file to import NuGet.Build.Tasks.Pack.targets so that the pack task can be executed. Vous devez toujours restaurer le projet avant que vous pouvez choisir un fichier nuspec.You still need to restore the project before you can pack a nuspec file. Le framework cible du fichier projet n’est pas pertinent et pas utilisé lors de la compression d’un fichier 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> 

Veuillez noter qu’un nuspec de livraison à l’aide de dotnet.exe ou msbuild permet d’accéder à la génération du 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 dotnet.exe, qui est l’équivalent du paramètre de propriété <NoBuild>true</NoBuild> dans votre fichier projet, ainsi que de paramètre <IncludeBuildOutput>false</IncludeBuildOutput> dans le fichier projetThis 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

Un exemple d’un fichier csproj pour compresser un fichier nuspec est :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>

Avancée des points d’extension pour créer le package personnaliséAdvanced extension points to create customized package

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

  • TargetsForTfmSpecificBuildOutput cible : utilisation de fichiers à l’intérieur de la lib dossier ou un dossier spécifié à l’aide BuildOutputTargetFolder.TargetsForTfmSpecificBuildOutput target: Use for files inside the lib folder or a folder specified using BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackage cible : utilisation de fichiers en dehors de la BuildOutputTargetFolder.TargetsForTfmSpecificContentInPackage target: Use for files outside the BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutputTargetsForTfmSpecificBuildOutput

Écrire une cible personnalisée et spécifiez-le comme valeur de la $(TargetsForTfmSpecificBuildOutput) propriété.Write a custom target and specify it as the value of the $(TargetsForTfmSpecificBuildOutput) property. Pour tous les fichiers qui doivent passer dans le BuildOutputTargetFolder (lib par défaut), la cible doit écrire ces fichiers dans un ItemGroup BuildOutputInPackage et définissez 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: Le chemin d’accès absolu du fichier ; Si n’est fourni, l’identité est utilisée pour évaluer le chemin d’accès source.FinalOutputPath: The absolute path of the file; if not provided, the Identity is used to evaluate source path.
  • TargetPath: (Facultatif) défini quand le fichier doit aller dans un sous-dossier au sein de lib\<TargetFramework> , tels que les assemblys satellites disponibles vont 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

Écrire une cible personnalisée et spécifiez-le comme valeur de la $(TargetsForTfmSpecificContentInPackage) 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 un 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 sortie dans le package.PackagePath: Path where the file should be output in the package. NuGet émet un avertissement si plus d’un fichier est ajouté à la même chemin d’accès du package.NuGet issues a warning if more than one file is added to the same package path.
  • BuildAction: L’action de génération à assigner au fichier, requis uniquement si le chemin d’accès du package est dans le contentFiles dossier.BuildAction: The build action to assign to the file, required only if the package path is in the contentFiles folder. Valeur par défaut est « None ».Defaults to "None".

Voici un 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

Le restore cibler works uniquement pour les projets utilisant le format PackageReference.The restore target works only for projects using the PackageReference format. C’est le cas pas Professionnel pour les projets utilisant le packages.config format ; utiliser 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, permet d’éviter l’utilisation de packages de mise en cache.If true, avoids using cached packages. Consultez gérer les packages globaux et les dossiers 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.
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.
RestoreOutputPathRestoreOutputPath Dossier de sortie qui est par défaut le dossier obj.Output folder, defaulting to 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

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" />