Ajouts au format csproj pour .NET CoreAdditions to the csproj format for .NET Core

Ce document décrit les modifications qui ont été ajoutées aux fichiers projet dans le cadre du passage de project.json à csproj et MSBuild.This document outlines the changes that were added to the project files as part of the move from project.json to csproj and MSBuild. Pour plus d’informations de référence ou syntaxiques générales sur les fichiers projet, consultez la documentation sur les fichiers projet MSBuild.For more information about general project file syntax and reference, see the MSBuild project file documentation.

Références de package implicitesImplicit package references

Les métapackages sont référencés implicitement en fonction du ou des frameworks cibles spécifiés dans la propriété <TargetFramework> ou <TargetFrameworks> de votre fichier projet.Metapackages are implicitly referenced based on the target framework(s) specified in the <TargetFramework> or <TargetFrameworks> property of your project file. <TargetFrameworks> est ignoré si <TargetFramework> est spécifié, indépendamment de l’ordre.<TargetFrameworks> is ignored if <TargetFramework> is specified, independent of order. Pour plus d’informations, consultez Packages, métapackages et frameworks.For more information, see Packages, metapackages and frameworks.

 <PropertyGroup>
   <TargetFramework>netcoreapp2.1</TargetFramework>
 </PropertyGroup>
<PropertyGroup>
  <TargetFrameworks>netcoreapp2.1;net462</TargetFrameworks>
</PropertyGroup>

RecommandationsRecommendations

Comme les métapackages Microsoft.NETCore.App ou NETStandard.Library sont implicitement référencés, voici les bonnes pratiques que nous recommandons :Since Microsoft.NETCore.App or NETStandard.Library metapackages are implicitly referenced, the following are our recommended best practices:

  • Quand vous ciblez .NET Core ou .NET Standard, n’incluez jamais de référence explicite aux métapackages Microsoft.NETCore.App ou NETStandard.Library via un élément <PackageReference> dans votre fichier projet.When targeting .NET Core or .NET Standard, never have an explicit reference to the Microsoft.NETCore.App or NETStandard.Library metapackages via a <PackageReference> item in your project file.
  • Si vous avez besoin d’une version spécifique du runtime quand vous ciblez .NET Core, vous devez utiliser la propriété <RuntimeFrameworkVersion> dans votre projet (par exemple, 1.0.4) au lieu de référencer le métapackage.If you need a specific version of the runtime when targeting .NET Core, you should use the <RuntimeFrameworkVersion> property in your project (for example, 1.0.4) instead of referencing the metapackage.
    • Cela peut se produire si vous utilisez des déploiements autonomes et que vous devez utiliser une version de correctif spécifique du runtime 1.0.0 LTS, par exemple.This might happen if you are using self-contained deployments and you need a specific patch version of 1.0.0 LTS runtime, for example.
  • Si vous avez besoin d’une version spécifique du métapackage NETStandard.Library quand vous ciblez .NET Standard, vous pouvez utiliser la propriété <NetStandardImplicitPackageVersion> et définir la version dont vous avez besoin.If you need a specific version of the NETStandard.Library metapackage when targeting .NET Standard, you can use the <NetStandardImplicitPackageVersion> property and set the version you need.
  • Vous ne devez pas ajouter ni mettre à jour explicitement les références au métapackage Microsoft.NETCore.App ou NETStandard.Library dans les projets .NET Framework.Don't explicitly add or update references to either the Microsoft.NETCore.App or NETStandard.Library metapackage in .NET Framework projects. Si une version de NETStandard.Library est nécessaire lors de l’utilisation d’un package NuGet basé sur .NET Standard, NuGet installe automatiquement cette version.If any version of NETStandard.Library is needed when using a .NET Standard-based NuGet package, NuGet automatically installs that version.

Version implicite pour certaines références de packagesImplicit version for some package references

La plupart des utilisations de <PackageReference> nécessitent de définir l’attribut Version pour spécifier la version du package NuGet à utiliser.Most usages of <PackageReference> require setting the Version attribute to specify the NuGet package version to be used. Cependant, lorsque vous utilisez .NET Core 2.1 ou 2.2 et référencez Microsoft.AspNetCore.App ou Microsoft.AspNetCore.All, cet attribut n’est pas nécessaire.When using .NET Core 2.1 or 2.2 and referencing Microsoft.AspNetCore.App or Microsoft.AspNetCore.All, however, the attribute is unnecessary. Le Kit SDK .NET Core peut sélectionner automatiquement la version des packages à utiliser.The .NET Core SDK can automatically select the version of these packages that should be used.

RecommandationRecommendation

Lorsque vous référencez les packages Microsoft.AspNetCore.App ou Microsoft.AspNetCore.All, ne spécifiez pas leur version.When referencing the Microsoft.AspNetCore.App or Microsoft.AspNetCore.All packages, do not specify their version. Si une version est spécifiée, le Kit SDK risque de générer l’avertissement NETSDK1071.If a version is specified, the SDK may produce warning NETSDK1071. Pour résoudre cet avertissement, supprimez la version du package, comme dans l’exemple suivant :To fix this warning, remove the package version like in the following example:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

Problème connu : le Kit SDK .NET Core 2.1 prend uniquement en charge cette syntaxe si le projet utilise également Microsoft.NET.Sdk.Web.Known issue: the .NET Core 2.1 SDK only supported this syntax when the project also uses Microsoft.NET.Sdk.Web. Ce problème est résolu dans le SDK .NET Core 2.2.This is resolved in the .NET Core 2.2 SDK.

Ces références aux métapackages ASP.NET Core ont un comportement légèrement différent de celui de la plupart des packages NuGet normaux.These references to ASP.NET Core metapackages have a slightly different behavior from most normal NuGet packages. Les déploiements dépendant du framework d’applications qui utilisent ces métapackages tirent automatiquement parti du framework partagé ASP.NET Core.Framework-dependent deployments of applications that use these metapackages automatically take advantage of the ASP.NET Core shared framework. Quand vous utilisez les métapackages aucune des ressources des packages NuGet ASP.NET Core référencés n’est déployée avec l’application — le framework partagé ASP.NET Core contient ces ressources.When you use the metapackages, no assets from the referenced ASP.NET Core NuGet packages are deployed with the application—the ASP.NET Core shared framework contains these assets. Les ressources présentes dans le framework partagé sont optimisées pour la plateforme cible afin d’améliorer la vitesse de démarrage des applications.The assets in the shared framework are optimized for the target platform to improve application startup time. Pour plus d’informations sur le framework partagé, consultez Empaquetage de la distribution de .NET Core.For more information about shared framework, see .NET Core distribution packaging.

Si une version est spécifiée, elle est traitée comme la version minimale du framework partagé ASP.NET Core pour les déploiements dépendant du framework, et comme une version exacte pour les déploiements autonomes.If a version is specified, it's treated as the minimum version of ASP.NET Core shared framework for framework-dependent deployments and as an exact version for self-contained deployments. Cela peut avoir les conséquences suivantes :This can have the following consequences:

  • Si la version d’ASP.NET Core installée sur le serveur est inférieure à la version spécifiée sur PackageReference, le processus .NET Core n’est pas lancé.If the version of ASP.NET Core installed on the server is less than the version specified on the PackageReference, the .NET Core process fails to launch. Les mises à jour du métapackage sont souvent disponibles sur NuGet.org avant que des mises à jour soient publiées dans les environnements d’hébergement comme Azure.Updates to the metapackage are often available on NuGet.org before updates have been made available in hosting environments such as Azure. La mise à jour de la version sur PackageReference avec ASP.NET Core peut entraîner l’échec d’une application déployée.Updating the version on the PackageReference to ASP.NET Core could cause a deployed application to fail.
  • Si l’application est déployée comme un déploiement autonome, cette application ne peut pas contenir les dernières mises à jour de sécurité pour .NET Core.If the application is deployed as a self-contained deployment, the application may not contain the latest security updates to .NET Core. Quand une version n’est pas spécifiée, le Kit SDK peut inclure automatiquement la dernière version ASP.NET Core dans le déploiement autonome.When a version isn't specified, the SDK can automatically include the newest version of ASP.NET Core in the self-contained deployment.

Inclusions de compilation par défaut dans les projets .NET CoreDefault compilation includes in .NET Core projects

Dans le cadre du passage au format csproj dans les dernières versions du SDK, nous avons déplacé les inclusions et exclusions par défaut pour les éléments de compilation et les ressources incorporées dans les fichiers de propriétés du SDK.With the move to the csproj format in the latest SDK versions, we've moved the default includes and excludes for compile items and embedded resources to the SDK properties files. Cela signifie que vous n’avez plus besoin de spécifier ces éléments dans votre fichier projet.This means that you no longer need to specify these items in your project file.

La principale raison de cette modification est de réduire l’encombrement de votre fichier projet.The main reason for doing this is to reduce the clutter in your project file. Les valeurs par défaut qui sont présentes dans le SDK doivent couvrir la plupart des cas d’utilisation courants, il est donc inutile de les répéter dans chaque projet que vous créez.The defaults that are present in the SDK should cover most common use cases, so there is no need to repeat them in every project that you create. Il en résulte des fichiers projet moins volumineux qui sont beaucoup plus faciles à comprendre et à modifier à la main, si nécessaire.This leads to smaller project files that are much easier to understand as well as edit by hand, if needed.

Le tableau suivant montre les éléments et les modèles Glob inclus et exclus dans le SDK :The following table shows which element and which globs are both included and excluded in the SDK:

ÉlémentElement Inclure GlobInclude glob Exclure GlobExclude glob Supprimer GlobRemove glob
CompileCompile **/*.cs (ou autres extensions de langage)**/*.cs (or other language extensions) **/*.user ; **/*.*proj ; **/*.sln ; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/AN/A
EmbeddedResourceEmbeddedResource **/*.resx**/*.resx **/*.user ; **/*.*proj ; **/*.sln ; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/AN/A
Aucun.None **/* **/*.user ; **/*.*proj ; **/*.sln ; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc **/*.cs; **/*.resx**/*.cs; **/*.resx

Notes

Exclure Glob exclut toujours les dossiers ./bin et ./obj, respectivement représentés par les propriétés MSBuild $(BaseOutputPath) et $(BaseIntermediateOutputPath).Exclude glob always excludes the ./bin and ./obj folders, which are represented by the $(BaseOutputPath) and $(BaseIntermediateOutputPath) MSBuild properties, respectively. Dans l’ensemble, toutes les exclusions sont représentées par $(DefaultItemExcludes).As a whole, all excludes are represented by $(DefaultItemExcludes).

Si vous avez des modèles Glob dans votre projet et que vous essayez de le générer à l’aide du dernier SDK, vous obtenez l’erreur suivante :If you have globs in your project and you try to build it using the newest SDK, you'll get the following error:

Des éléments de compilation en double ont été inclus.Duplicate Compile items were included. Le SDK .NET inclut des éléments de compilation de votre répertoire de projet par défaut.The .NET SDK includes Compile items from your project directory by default. Vous pouvez supprimer ces éléments de votre fichier projet ou définir la propriété 'EnableDefaultCompileItems' sur 'false' si vous voulez explicitement les inclure dans votre fichier projet.You can either remove these items from your project file, or set the 'EnableDefaultCompileItems' property to 'false' if you want to explicitly include them in your project file.

Pour contourner cette erreur, vous pouvez supprimer les éléments Compile explicites qui correspondent à ceux répertoriés dans le tableau précédent ou vous pouvez définir la propriété <EnableDefaultCompileItems> sur false, comme ceci :In order to get around this error, you can either remove the explicit Compile items that match the ones listed on the previous table, or you can set the <EnableDefaultCompileItems> property to false, like this:

<PropertyGroup>
    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>

Le fait de définir cette propriété avec la valeur false désactive l’inclusion implicite, ce qui rétablit le comportement des SDK précédents dans lesquels vous deviez spécifier les globs par défaut dans votre projet.Setting this property to false will disable implicit inclusion, reverting to the behavior of previous SDKs where you had to specify the default globs in your project.

Ce changement ne modifie pas le mécanisme principal des autres inclusions.This change does not modify the main mechanics of other includes. Toutefois, si vous voulez, par exemple, spécifier certains fichiers à publier avec votre application, vous pouvez toujours utiliser les mécanismes connus dans csproj correspondants (par exemple, l’élément <Content>).However, if you wish to specify, for example, some files to get published with your app, you can still use the known mechanisms in csproj for that (for example, the <Content> element).

<EnableDefaultCompileItems> désactive uniquement les modèles Glob Compile, mais n’affecte pas les autres modèles Glob, comme le modèle Glob implicite None, qui s’applique également aux éléments *.cs.<EnableDefaultCompileItems> only disables Compile globs but doesn't affect other globs, like the implicit None glob, which also applies to *.cs items. Par conséquent, l’Explorateur de solutions continue d’afficher des éléments *.cs dans le cadre du projet, inclus en tant qu’éléments None.Because of that, Solution Explorer will continue show *.cs items as part of the project, included as None items. De la même façon, vous pouvez affecter à <EnableDefaultNoneItems> la valeur false pour désactiver le modèle Glob implicite None, comme ceci :In a similar way, you can set <EnableDefaultNoneItems> to false to disable the implicit None glob, like this:

<PropertyGroup>
    <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
</PropertyGroup>

Pour désactiver tous les modèles Glob implicites, vous pouvez affecter à la propriété <EnableDefaultItems> la valeur false comme dans l’exemple suivant :To disable all implicit globs, you can set the <EnableDefaultItems> property to false as in the following example:

<PropertyGroup>
    <EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>

Comment afficher la totalité du projet tel qu’il est perçu par MSBuild ?How to see the whole project as MSBuild sees it

Même si ces modifications csproj simplifient considérablement les fichiers projet, vous pouvez souhaiter voir le projet entièrement développé tel qu’il est perçu par MSBuild une fois le kit SDK et ses cibles inclus.While those csproj changes greatly simplify project files, you might want to see the fully expanded project as MSBuild sees it once the SDK and its targets are included. Prétraitez le projet avec le commutateur /pp de la commande dotnet msbuild, qui affiche les fichiers qui sont importés, leurs sources et leurs contributions à la build sans réellement générer le projet :Preprocess the project with the /pp switch of the dotnet msbuild command, which shows which files are imported, their sources, and their contributions to the build without actually building the project:

dotnet msbuild -pp:fullproject.xml

Si le projet comporte plusieurs frameworks cibles, les résultats de la commande ne doivent se concentrer que sur un seul d'entre eux en le spécifiant en tant que propriété MSBuild :If the project has multiple target frameworks, the results of the command should be focused on only one of them by specifying it as an MSBuild property:

dotnet msbuild -p:TargetFramework=netcoreapp2.0 -pp:fullproject.xml

AjoutsAdditions

Attribut SdkSdk attribute

L’élément <Project> racine du fichier .csproj a un nouvel attribut nommé Sdk.The root <Project> element of the .csproj file has a new attribute called Sdk. Sdk spécifie le SDK à utiliser par le projet.Sdk specifies which SDK will be used by the project. Le SDK, comme le décrit le document de superposition, est un ensemble de tâches et de cibles MSBuild pouvant générer du code .NET Core.The SDK, as the layering document describes, is a set of MSBuild tasks and targets that can build .NET Core code. Trois SDK principaux sont fournis avec les outils .NET Core, et deux autres SDK sont fournis lors de l’utilisation de la préversion de .NET Core 3.0 :We ship three main SDKs with the .NET Core tools and an additional two SDKs when using .NET Core 3.0 Preview:

  1. Le SDK .NET Core avec l’ID Microsoft.NET.SdkThe .NET Core SDK with the ID of Microsoft.NET.Sdk
  2. Le SDK .NET Core avec l’ID Microsoft.NET.Sdk.WebThe .NET Core web SDK with the ID of Microsoft.NET.Sdk.Web
  3. Le Kit SDK de la bibliothèque de classes .NET Core Razor avec l’ID Microsoft.NET.Sdk.RazorThe .NET Core Razor Class Library SDK with the ID of Microsoft.NET.Sdk.Razor
  4. Le Service Worker .NET Core avec l’ID Microsoft.NET.Sdk.Worker (préversion de .NET Core 3.0)The .NET Core Worker Service with the ID of Microsoft.NET.Sdk.Worker (.NET Core 3.0 Preview)
  5. WinForms et WPF .NET Core avec l’ID Microsoft.NET.Sdk.WindowsDesktop (préversion de .NET Core 3.0)The .NET Core WinForms and WPF with the ID of Microsoft.NET.Sdk.WindowsDesktop (.NET Core 3.0 Preview)

Vous devez définir l’attribut Sdk sur un de ces ID pour l’élément <Project> afin d’utiliser les outils .NET Core et générer votre code.You need to have the Sdk attribute set to one of those IDs on the <Project> element in order to use the .NET Core tools and build your code.

PackageReferencePackageReference

Un élément <PackageReference> spécifie une dépendance NuGet dans le projet.A <PackageReference> item element specifies a NuGet dependency in the project. L’attribut Include spécifie l’ID du package.The Include attribute specifies the package ID.

<PackageReference Include="<package-id>" Version="" PrivateAssets="" IncludeAssets="" ExcludeAssets="" />

VersionVersion

L’attribut obligatoire Version spécifie la version du package à restaurer.The required Version attribute specifies the version of the package to restore. L’attribut respecte les règles du schéma de contrôle de version de NuGet.The attribute respects the rules of the NuGet versioning scheme. Le comportement par défaut est une correspondance exacte entre les versions.The default behavior is an exact version match. Par exemple, la spécification Version="1.2.3" est équivalente à la notation [1.2.3] de NuGet pour la version du package 1.2.3 précisément.For example, specifying Version="1.2.3" is equivalent to NuGet notation [1.2.3] for the exact 1.2.3 version of the package.

IncludeAssets, ExcludeAssets et PrivateAssetsIncludeAssets, ExcludeAssets and PrivateAssets

L’attribut IncludeAssets spécifie quelles ressources appartenant au package spécifié par <PackageReference> doivent être utilisées.IncludeAssets attribute specifies which assets belonging to the package specified by <PackageReference> should be consumed. Par défaut, toutes les ressources du package sont incluses.By default, all package assets are included.

L’attribut ExcludeAssets spécifie quelles ressources appartenant au package spécifié par <PackageReference> ne doivent pas être utilisées.ExcludeAssets attribute specifies which assets belonging to the package specified by <PackageReference> should not be consumed.

L’attribut PrivateAssets spécifie quelles ressources appartenant au package spécifié par <PackageReference> doivent être utilisées, mais sans être reprises dans le projet suivant.PrivateAssets attribute specifies which assets belonging to the package specified by <PackageReference> should be consumed but not flow to the next project. Les ressources Analyzers, Build et ContentFiles sont par défaut privées en l’absence de cet attribut.The Analyzers, Build and ContentFiles assets are private by default when this attribute is not present.

Notes

PrivateAssets est équivalent à l’élément project.json/xproj SuppressParent.PrivateAssets is equivalent to the project.json/xproj SuppressParent element.

Ces attributs peuvent contenir un ou plusieurs éléments de la liste suivante, séparés par le caractère point-virgule ; le cas échéant :These attributes can contain one or more of the following items, separated by the semicolon ; character if more than one is listed:

  • Compile : Le contenu du dossier lib est disponible pour la compilation.Compile – the contents of the lib folder are available to compile against.
  • Runtime : Le contenu du dossier runtime est distribué.Runtime – the contents of the runtime folder are distributed.
  • ContentFiles : Le contenu du dossier contentfiles est utilisé.ContentFiles – the contents of the contentfiles folder are used.
  • Build : Les propriétés/cibles du dossier de génération sont utilisées.Build – the props/targets in the build folder are used.
  • Native : Le contenu des ressources natives est copié dans le dossier de sortie de l’exécution.Native – the contents from native assets are copied to the output folder for runtime.
  • Analyzers : Les analyseurs sont utilisés.Analyzers – the analyzers are used.

Sinon, l’attribut peut contenir :Alternatively, the attribute can contain:

  • None : Aucune ressource n’est utilisée.None – none of the assets are used.
  • All : Toutes les ressources sont utilisées.All – all assets are used.

DotNetCliToolReferenceDotNetCliToolReference

Un élément <DotNetCliToolReference> spécifie l’outil CLI que l’utilisateur souhaite restaurer dans le contexte du projet.A <DotNetCliToolReference> item element specifies the CLI tool that the user wants to restore in the context of the project. Il constitue une alternative au nœud tools dans project.json.It's a replacement for the tools node in project.json.

<DotNetCliToolReference Include="<package-id>" Version="" />

VersionVersion

Version spécifie la version du package à restaurer.Version specifies the version of the package to restore. L’attribut respecte les règles du schéma de contrôle de version de NuGet.The attribute respects the rules of the NuGet versioning scheme. Le comportement par défaut est une correspondance exacte entre les versions.The default behavior is an exact version match. Par exemple, la spécification Version="1.2.3" est équivalente à la notation [1.2.3] de NuGet pour la version du package 1.2.3 précisément.For example, specifying Version="1.2.3" is equivalent to NuGet notation [1.2.3] for the exact 1.2.3 version of the package.

RuntimeIdentifiersRuntimeIdentifiers

L’élément de propriété <RuntimeIdentifiers> vous permet de spécifier une liste délimitée par des points-virgules d’identificateurs de runtime (RID) pour le projet.The <RuntimeIdentifiers> property element lets you specify a semicolon-delimited list of Runtime Identifiers (RIDs) for the project. Les RID permettent de publier des déploiements autonomes.RIDs enable publishing self-contained deployments.

<RuntimeIdentifiers>win10-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>

RuntimeIdentifierRuntimeIdentifier

L’élément de propriété <RuntimeIdentifier> vous permet de spécifier un seul identificateur de runtime (RID) pour le projet.The <RuntimeIdentifier> property element allows you to specify only one Runtime Identifier (RID) for the project. Le RID permet de publier un déploiement autonome.The RID enables publishing a self-contained deployment.

<RuntimeIdentifier>ubuntu.16.04-x64</RuntimeIdentifier>

Utilisez plutôt <RuntimeIdentifiers> (au pluriel) si vous devez publier pour plusieurs runtimes.Use <RuntimeIdentifiers> (plural) instead if you need to publish for multiple runtimes. <RuntimeIdentifier> peut fournir des builds plus rapides quand un seul runtime est nécessaire.<RuntimeIdentifier> can provide faster builds when only a single runtime is required.

PackageTargetFallbackPackageTargetFallback

L’élément de propriété <PackageTargetFallback> vous permet de spécifier un jeu de cibles compatibles à utiliser lors de la restauration des packages.The <PackageTargetFallback> property 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 le moniker du framework cible dotnet de fonctionner avec les packages qui ne déclarent pas de moniker du framework cible dotnet.It's designed to allow packages that use the dotnet TxM (Target x Moniker) to operate with packages that don't declare a dotnet TxM. 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.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.

L’exemple suivant fournit les solutions de secours pour toutes les cibles dans votre projet :The following example provides the fallbacks for all targets in your project:

<PackageTargetFallback>
    $(PackageTargetFallback);portable-net45+win8+wpa81+wp8
</PackageTargetFallback >

L’exemple suivant spécifie les solutions de secours uniquement pour la cible netcoreapp2.1 :The following example specifies the fallbacks only for the netcoreapp2.1 target:

<PackageTargetFallback Condition="'$(TargetFramework)'=='netcoreapp2.1'">
    $(PackageTargetFallback);portable-net45+win8+wpa81+wp8
</PackageTargetFallback >

Propriétés de métadonnées NuGetNuGet metadata properties

Avec le passage à MSBuild, nous avons transféré les métadonnées d’entrée utilisées lors de la compression d’un package NuGet des fichiers project.json vers les fichiers csproj.With the move to MSBuild, we have moved the input metadata that is used when packing a NuGet package from project.json to .csproj files. Les entrées sont des propriétés MSBuild qui doivent donc être placées dans un groupe <PropertyGroup>.The inputs are MSBuild properties so they have to go within a <PropertyGroup> group. Voici la liste des propriétés qui sont utilisées comme entrées dans le processus de compression lors de l’utilisation de la commande dotnet pack ou de la cible MSBuild Pack qui fait partie du SDK.The following is the list of properties that are used as inputs to the packing process when using the dotnet pack command or the Pack MSBuild target that is part of the SDK.

IsPackableIsPackable

Valeur booléenne qui spécifie si le projet peut être compressé.A Boolean value that specifies whether the project can be packed. La valeur par défaut est true.The default value is true.

PackageVersionPackageVersion

Spécifie la version du package obtenu.Specifies the version that the resulting package will have. Accepte toutes les formes de la chaîne de version NuGet.Accepts all forms of NuGet version string. La valeur par défaut est la valeur de $(Version), autrement dit, de la propriété Version dans le projet.Default is the value of $(Version), that is, of the property Version in the project.

PackageIdPackageId

Spécifie le nom du package obtenu.Specifies the name for the resulting package. Si non spécifié, l’opération pack utilise par défaut le AssemblyName ou le nom du répertoire comme nom du package.If not specified, the pack operation will default to using the AssemblyName or directory name as the name of the package.

TitreTitle

Titre convivial du package, généralement utilisé dans les affichages de l’interface utilisateur comme sur nuget.org et dans le gestionnaire de package de Visual Studio.A human-friendly title of the package, typically used in UI displays as on nuget.org and the Package Manager in Visual Studio. Si non spécifié, l’ID de package est utilisé à la place.If not specified, the package ID is used instead.

AuteursAuthors

Liste séparée par des points-virgules des auteurs de packages, qui correspondent aux noms de profil sur nuget.org. Ceux-ci sont affichés dans la galerie NuGet sur nuget.org et servent à croiser les références des packages de mêmes auteurs.A semicolon-separated list of packages authors, matching the profile names on nuget.org. These are displayed in the NuGet Gallery on nuget.org and are used to cross-reference packages by the same authors.

PackageDescriptionPackageDescription

Description longue du package pour l’affichage de l’interface utilisateur.A long description of the package for UI display.

DescriptionDescription

Description longue de l'assembly.A long description for the assembly. Si PackageDescription n’est pas spécifié, cette propriété est également utilisée comme description du package.If PackageDescription is not specified then this property is also used as the description of the package.

Détails de copyright pour le package.Copyright details for the package.

PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance

Valeur booléenne qui spécifie si le client doit inviter l’utilisateur à accepter la licence du package avant d’installer le package.A Boolean value that specifies whether the client must prompt the consumer to accept the package license before installing the package. La valeur par défaut est false.The default is false.

PackageLicenseExpressionPackageLicenseExpression

Identificateur de licence SPDX ou expression.An SPDX license identifier or expression. Par exemple, Apache-2.0.For example, Apache-2.0.

Voici la liste complète des identificateurs de licence SPDX.Here is the complete list of SPDX license identifiers. NuGet.org n’accepte que les licences approuvées OSI et FSF avec une expression de type licence.NuGet.org accepts only OSI or FSF approved licenses when using license type expression.

La syntaxe exacte des expressions de licence est décrite ci-dessous dans ABNF.The exact syntax of the license expressions is described below in ABNF.

license-id            = <short form license identifier from https://spdx.org/spdx-specification-21-web-version#h.luq9dgcle9mo>

license-exception-id  = <short form license exception identifier from https://spdx.org/spdx-specification-21-web-version#h.ruv3yl8g6czd>

simple-expression = license-id / license-id”+”

compound-expression =  1*1(simple-expression /
                simple-expression "WITH" license-exception-id /
                compound-expression "AND" compound-expression /
                compound-expression "OR" compound-expression ) /
                "(" compound-expression ")" )

license-expression =  1*1(simple-expression / compound-expression / UNLICENSED)

Notes

Il n’est pas possible de spécifier plusieurs des éléments suivants à la fois : PackageLicenseExpression, PackageLicenseFile et PackageLicenseUrl.Only one of PackageLicenseExpression, PackageLicenseFile and PackageLicenseUrl can be specified at a time.

PackageLicenseFilePackageLicenseFile

Chemin d’un fichier de licence du package, si la licence utilisée n’a pas été attribuée à un identificateur SPDX, ou il s’agit d’une licence personnalisée (sinon, PackageLicenseExpression est recommandé).Path to a license file within the package if you are using a license that hasn’t been assigned an SPDX identifier, or it is a custom license (Otherwise PackageLicenseExpression is preferred)

Remplace PackageLicenseUrl, n’est pas combinable avec PackageLicenseExpression et exige Visual Studio 15.9.4, le kit SDK .NET 2.1.502 ou 2.2.101, ou une version ultérieure.Replaces PackageLicenseUrl, can't be combined with PackageLicenseExpression and requires Visual Studio 15.9.4, .NET SDK 2.1.502 or 2.2.101, or newer.

Vérifiez que le fichier de licence est empaqueté en l’ajoutant explicitement au projet ; voici un exemple d’utilisation :You will need to ensure the license file is packed by adding it explicitly to the project, example usage:

<PropertyGroup>
  <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
  <None Include="licenses\LICENSE.txt" Pack="true" PackagePath="$(PackageLicenseFile)"/>
</ItemGroup>

PackageLicenseUrlPackageLicenseUrl

URL vers la licence applicable au package.An URL to the license that is applicable to the package. (Déconseillé depuis Visual Studio 15.9.4, le kit SDK .NET 2.1.502 et 2.2.101)(deprecated since Visual Studio 15.9.4, .NET SDK 2.1.502 and 2.2.101)

PackageIconUrlPackageIconUrl

URL d’une image 64 x 64 avec un arrière-plan transparent à utiliser comme icône pour le package dans l’affichage de l’interface utilisateur.A URL for a 64x64 image with transparent background to use as the icon for the package in UI display.

PackageReleaseNotesPackageReleaseNotes

Notes de publication du package.Release notes for the package.

PackageTagsPackageTags

Liste de balises séparées par un point-virgule qui désigne le package.A semicolon-delimited list of tags that designates the package.

PackageOutputPathPackageOutputPath

Détermine le chemin de sortie dans lequel le package compressé est déposé.Determines the output path in which the packed package will be dropped. La valeur par défaut est $(OutputPath).Default is $(OutputPath).

IncludeSymbolsIncludeSymbols

Cette valeur booléenne indique si le package doit créer un package de symboles supplémentaire quand le projet est compressé.This Boolean value indicates whether the package should create an additional symbols package when the project is packed. Le format du package de symboles est contrôlé par la propriété SymbolPackageFormat.The symbols package's format is controlled by the SymbolPackageFormat property.

SymbolPackageFormatSymbolPackageFormat

Spécifie le format du package de symboles.Specifies the format of the symbols package. Si la valeur est « symbols.nupkg », un package de symboles hérité est créé avec une extension .symbols.nupkg contenant des fichiers PDB, DLL et d’autres fichiers de sortie.If "symbols.nupkg", a legacy symbols package will be created with a .symbols.nupkg extension containing PDBs, DLLs, and other output files. Si la valeur est « snupkg », un package de symboles snupkg est créé, contenant les fichiers PDB portables.If "snupkg", a snupkg symbol package will be created containing the portable PDBs. La valeur par défaut est « symbols.nupkg ».Default is "symbols.nupkg".

IncludeSourceIncludeSource

Cette valeur booléenne indique si le processus de compression doit créer un package source.This Boolean value indicates whether the pack process should create a source package. Le package source contient le code source de la bibliothèque ainsi que les fichiers PDB.The source package contains the library's source code as well as PDB files. Les fichiers sources sont placés dans le répertoire src/ProjectName dans le fichier de package obtenu.Source files are put under the src/ProjectName directory in the resulting package file.

IsToolIsTool

Spécifie si tous les fichiers de sortie sont copiés dans le dossier tools au lieu du dossier lib.Specifies whether all output files 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 the .csproj file.

RepositoryUrlRepositoryUrl

Spécifie l’URL du dépôt où réside le code source du package et/ou à partir de laquelle il est généré.Specifies the URL for the repository where the source code for the package resides and/or from which it's being built.

RepositoryTypeRepositoryType

Spécifie le type de dépôt.Specifies the type of the repository. La valeur par défaut est « git ».Default is "git".

NoPackageAnalysisNoPackageAnalysis

Spécifie que le pack ne doit pas exécuter d’analyse du package après sa génération.Specifies that pack should not run package analysis after building the package.

MinClientVersionMinClientVersion

Spécifie la version minimale du client NuGet qui peut installer ce package, appliquée par nuget.exe et le gestionnaire de package Visual Studio.Specifies the minimum version of the NuGet client that can install this package, enforced by nuget.exe and the Visual Studio Package Manager.

IncludeBuildOutputIncludeBuildOutput

Ces valeurs booléennes spécifient si les assemblys de sortie de génération doivent être compressés dans le fichier .nupkg ou non.This Boolean values specifies whether the build output assemblies should be packed into the .nupkg file or not.

IncludeContentInPackIncludeContentInPack

Cette valeur booléenne indique si tous les éléments qui ont un type Content sont automatiquement inclus dans le package obtenu.This Boolean value specifies whether any items that have a type of Content will be included in the resulting package automatically. La valeur par défaut est true.The default is true.

BuildOutputTargetFolderBuildOutputTargetFolder

Spécifie le dossier où placer les assemblys de sortie.Specifies the folder where to place the output assemblies. 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.

ContentTargetFoldersContentTargetFolders

Cette propriété spécifie l’emplacement par défaut où placer tous les fichiers de contenu si PackagePath n’est pas spécifié pour eux.This property specifies the default location of where all the content files should go if PackagePath is not specified for them. La valeur par défaut est « content;contentFiles ».The default value is "content;contentFiles".

NuspecFileNuspecFile

Chemin relatif ou absolu du fichier .nuspec utilisé pour la compression.Relative or absolute path to the .nuspec file being used for packing.

Notes

Si le fichier .nuspec est spécifié, il est utilisé exclusivement pour les informations de packaging et toutes les informations non utilisées dans les projets.If the .nuspec file is specified, it's used exclusively for packaging information and any information in the projects is not used.

NuspecBasePathNuspecBasePath

Chemin de base pour le fichier .nuspec.Base path for the .nuspec file.

NuspecPropertiesNuspecProperties

Liste de paires clé=valeur séparées par un point-virgule.Semicolon separated list of key=value pairs.

Propriétés AssemblyInfoAssemblyInfo properties

Les attributs d’assembly qui figurent généralement dans un fichier AssemblyInfo désormais générés automatiquement à partir des propriétés.Assembly attributes that were typically present in an AssemblyInfo file are now automatically generated from properties.

Propriétés par attributProperties per attribute

Chaque attribut a une propriété qui contrôle son contenu et une autre pour désactiver sa génération, comme indiqué dans le tableau suivant :Each attribute has a property that control its content and another to disable its generation as shown in the following table:

AttributAttribute PropertyProperty Propriété permettant de désactiverProperty to disable
AssemblyCompanyAttribute Company GenerateAssemblyCompanyAttribute
AssemblyConfigurationAttribute Configuration GenerateAssemblyConfigurationAttribute
AssemblyCopyrightAttribute Copyright GenerateAssemblyCopyrightAttribute
AssemblyDescriptionAttribute Description GenerateAssemblyDescriptionAttribute
AssemblyFileVersionAttribute FileVersion GenerateAssemblyFileVersionAttribute
AssemblyInformationalVersionAttribute InformationalVersion GenerateAssemblyInformationalVersionAttribute
AssemblyProductAttribute Product GenerateAssemblyProductAttribute
AssemblyTitleAttribute AssemblyTitle GenerateAssemblyTitleAttribute
AssemblyVersionAttribute AssemblyVersion GenerateAssemblyVersionAttribute
NeutralResourcesLanguageAttribute NeutralLanguage GenerateNeutralResourcesLanguageAttribute

Remarques :Notes:

  • Le comportement par défaut de AssemblyVersion et FileVersion consiste à prendre la valeur de $(Version) sans suffixe.AssemblyVersion and FileVersion default is to take the value of $(Version) without suffix. Par exemple, si $(Version) est 1.2.3-beta.4, alors la valeur serait 1.2.3.For example, if $(Version) is 1.2.3-beta.4, then the value would be 1.2.3.
  • InformationalVersion utilise par défaut la valeur de $(Version).InformationalVersion defaults to the value of $(Version).
  • $(SourceRevisionId) est ajouté à InformationalVersion si la propriété est présente.InformationalVersion has $(SourceRevisionId) appended if the property is present. Cela peut être désactivé à l’aide de IncludeSourceRevisionInInformationalVersion.It can be disabled using IncludeSourceRevisionInInformationalVersion.
  • Les propriétés Copyright et Description sont également utilisées pour les métadonnées NuGet.Copyright and Description properties are also used for NuGet metadata.
  • Configuration est partagé avec le processus de génération et défini par le biais du paramètre --configuration des commandes dotnet.Configuration is shared with all the build process and set via the --configuration parameter of dotnet commands.

GenerateAssemblyInfoGenerateAssemblyInfo

Valeur booléenne qui active ou désactive la génération AssemblyInfo.A Boolean that enable or disable all the AssemblyInfo generation. La valeur par défaut est true.The default value is true.

GeneratedAssemblyInfoFileGeneratedAssemblyInfoFile

Chemin d’accès du fichier d’informations sur l’assembly généré.The path of the generated assembly info file. Utilise par défaut un fichier dans le répertoire $(IntermediateOutputPath) (obj).Default to a file in the $(IntermediateOutputPath) (obj) directory.