Définir un type de package NuGet

Les packages peuvent être marqués avec un ou plusieurs type de package pour indiquer son utilisation prévue.

Types de packages connus

  • Les packages de type Dependency ajoutent des ressources de build ou d’exécution aux bibliothèques et applications et peuvent être installés dans n’importe quel type de projet (en supposant qu’ils soient compatibles).

  • Les packages de type DotnetTool sont des outils .NET qui peuvent être installés par l’interface CLI dotnet.

  • Les packages de type MSBuildSdk sont des kits SDK de projet MSBuild qui simplifient l’utilisation des kits de développement logiciel.

  • Les packages de type Template fournissent des modèles personnalisés qui peuvent être utilisés pour créer des fichiers ou des projets comme des applications, des services, des outils ou des bibliothèques de classes.

Les packages non marqués avec un type, notamment tous les packages créés avec des versions antérieures de NuGet, sont du type Dependency par défaut.

Remarque

La prise en charge des types de package a été ajoutée dans NuGet 3.5. Si vous n’avez pas besoin d’un type de package personnalisé, il est préférable de ne pas définir explicitement de type de package. NuGet est défini par défaut sur le type Dependency lorsqu’aucun type n’est spécifié.

Types de packages personnalisés

Vous pouvez marquer votre package avec un ou plusieurs types de package personnalisés si son utilisation ne correspond pas aux types de package connus.

Par exemple, imaginons que les clients de l’application Contoso peuvent installer des extensions. L’application peut exiger que les auteurs d’extensions utilisent le type de package personnalisé ContosoExtension pour identifier leurs packages en tant qu’extensions appropriées qui suivent les conventions requises.

Avertissement

Un package avec un type de package personnalisé ne peut pas être installé par Visual Studio ou nuget.exe. Consultez NuGet/Home#10468 pour plus d’informations.

Les types de package peuvent être réglés dans le fichier projet (.csproj) :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    
    <PackageType>ContosoExtension</PackageType>
  </PropertyGroup>

</Project>

Les packages avec plusieurs utilisations prévues peuvent être marqués avec plusieurs types de packages à l’aide du délimiteur ; :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    
    <PackageType>PackageType1;PackageType2</PackageType>
  </PropertyGroup>

</Project>

Les types de package peuvent être versionnés à l’aide d’un séparateur , entre le type de package et sa chaîne Version :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    
    <PackageType>PackageType1, 1.0.0.0;PackageType2</PackageType>
  </PropertyGroup>

</Project>

Le format d’une chaîne de type de package est similaire à un ID de package. Autrement dit, un type de package est une chaîne insensible à la casse correspondant à l’expression régulière ^\w+([_.-]\w+)*$, comprenant entre 1 et 100 caractères.

Si elle est fournie, la version du type de package est une chaîne Version. La version du type de package est facultative et sa valeur par défaut est 0.0.