包可以再用一个 包类型 进行标记,以指示其预期用途。
已知包类型
Dependency
类型包将生成或运行时资产添加到库和应用程序,并且可以安装在任何项目类型(假设它们兼容) 中。DotnetTool
类型包是由 dotnet CLI 安装的 .NET 工具。MSBuildSdk
类型包是 MSBuild 项目 SDK, 可简化使用软件开发工具包。Template
类型包提供可用于创建文件或项目(如应用、服务、工具或类库)的 自定义模板 。McpServer
类型包包含 MCP 服务器。 此包类型始终附带DotnetTool
包类型,因为本地 MCP 服务器作为 .NET 工具分发。 有关 MCP 服务器和 NuGet 的信息,请参阅 NuGet 包中的 MCP 服务器。
未使用类型标记的包,包括使用早期版本的 NuGet 创建的所有包,默认为该 Dependency
类型。
Note
NuGet 3.5 中添加了对包类型的支持。
如果不需要自定义包类型,最好 不要 显式设置包类型。
未指定类型时,NuGet 默认为 Dependency
类型。
自定义包类型
如果包的使用不符合 已知包类型,则可以将包标记为一个或多个自定义包类型。
例如,假设应用的客户 Contoso
可以安装扩展。 应用可能要求扩展作者使用自定义包类型 ContosoExtension
来标识其包作为遵循所需约定的适当扩展。
Warning
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+)*$
至少具有一个字符和最多 100 个字符。
如果提供,则包类型版本为 Version
字符串。 包类型版本是可选的,默认为 0.0
。