设置 NuGet 包类型

包可以用多于一个包类型进行标记,以指示其预期用途。

已知包类型

  • Dependency 类型包将生成或运行时资产添加到库和应用程序,并且可以在任何项目类型中安装(假设它们相互兼容)。

  • DotnetTool 类型包是可以通过 dotnet CLI 安装的 .NET 工具。

  • MSBuildSdk 类型包是 MSBuild 项目 SDK,可简化使用软件开发工具包。

  • Template 类型包提供自定义模板,这些模板可以用来创建文件或项目,例如应用、服务、工具或类库。

未标记类型的包(包含使用更早版本的 NuGet 创建的所有包)默认为 Dependency 类型。

注意

已在 NuGet 3.5 中添加对包类型的支持。 如果不需要自定义包类型,最好不要显式设置包类型。 如果未指定类型,则 NuGet 默认为 Dependency 类型。

自定义包类型

如果其用途不适合已知包类型,则可以使用一个或多个自定义包类型来标记包。

例如,假设 Contoso 应用程序的客户可以安装扩展。 应用程序可能需要扩展作者以使用自定义包类型 ContosoExtension 将其包标识为遵循所需约定的适当扩展。

警告

无法通过 Visual Studio 或 nuget.exe 安装具有自定义包类型的包。 有关详细信息,请参阅 NuGet/Home#10468

包类型可以在项目文件 (.csproj) 中设置:

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

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

</Project>

具有多个预期用途的包可以使用 ; 分隔符标记多个包类型:

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

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

</Project>

可以使用包类型和 Version 字符串之间的 , 分隔符对包类型进行版本控制:

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

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

</Project>

包类型字符串的格式与包 ID 完全相同。 这表示包类型是与正则表达式 ^\w+([_.-]\w+)*$(具有最少 1 个字符,最多 100 个字符)相符的不区分大小写字符串。

如果提供,则包类型版本是一个 Version 字符串。 包类型版本是可选的,默认为 0.0