Definir um tipo de pacote NuGet

Os pacotes podem ser marcados com um ou mais tipos de pacotes para indicar seu uso pretendido.

Tipos de pacotes conhecidos

  • Pacotes do tipo Dependency adicionam ativos de tempo de build ou de execução a bibliotecas e aplicativos e podem ser instalados em qualquer tipo de projeto (supondo que eles sejam compatíveis).

  • Os pacotes do tipo DotnetTool são ferramentas .NET que podem ser instaladas pela CLI do dotnet.

  • Os pacotes do tipo MSBuildSdk são SDKs de projeto do MSBuild que simplificam o uso de kits de desenvolvimento de software.

  • Os pacotes do tipo Template fornecem modelos personalizados que podem ser usados para criar arquivos ou projetos como um aplicativo, serviço, ferramenta ou biblioteca de classes.

Pacotes não marcados com um tipo, incluindo todos os pacotes criados com versões anteriores do NuGet, usam o tipo Dependency como padrão.

Observação

O suporte a tipos de pacotes foi adicionado no NuGet 3.5. Se você não precisar de um tipo de pacote personalizado, é melhor não definir explicitamente o tipo de pacote. O NuGet assume como padrão o tipo Dependency quando nenhum tipo é especificado.

Tipos de pacotes personalizados

Você pode marcar seu pacote com um ou mais tipos de pacote personalizados se seu uso não se ajustar aos tipos de pacote conhecidos.

Por exemplo, imagine que os clientes do aplicativo Contoso podem instalar extensões. O aplicativo pode exigir que os autores de extensão usem o tipo de pacote personalizado ContosoExtension para identificar seus pacotes como extensões adequadas que seguem as convenções necessárias.

Aviso

Um pacote com um tipo de pacote personalizado não pode ser instalado pelo Visual Studio ou nuget.exe. Consulte NuGet/Home#10468 para obter mais informações.

Os tipos de pacote podem ser definidos no arquivo de projeto (.csproj):

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

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

</Project>

Pacotes com vários usos pretendidos podem ser marcados com vários tipos de pacote usando o delimitador ;:

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

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

</Project>

Os tipos de pacote podem ter a versão controlada usando um delimitador , entre o tipo de pacote e sua sequência Version:

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

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

</Project>

O formato de uma sequência de tipo de pacote é exatamente como um ID de pacote. Ou seja, um tipo de pacote é uma sequência sem diferenciação de maiúsculas e minúsculas que corresponde à expressão regular ^\w+([_.-]\w+)*$ com pelo menos um caractere e no máximo 100 caracteres.

Se fornecida, a versão do tipo de pacote é uma sequência Version. A versão do tipo de pacote é opcional e seu valor padrão é 0.0.