Set a NuGet package type
Packages can be marked with one more more package types to indicate its intended use.
Known package types
Dependency
type packages add build- or run-time assets to libraries and applications, and can be installed in any project type (assuming they are compatible).DotnetTool
type packages are .NET tools that can be installed by the dotnet CLI.MSBuildSdk
type packages are MSBuild project SDKs that simplifies using software development kits.Template
type packages provide custom templates that can be used to create files or projects like an app, service, tool, or class library.
Packages not marked with a type, including all packages created with earlier versions of NuGet, default to the Dependency
type.
Note
Support for package types was added in NuGet 3.5.
If you don't need a custom package type, it's best to not explicitly set the package type.
NuGet defaults to the Dependency
type when no type is specified.
Custom package types
You can mark your package with one or more custom package types if its use does not fit the known package types.
For example, imagine that customers of the Contoso
app can install extensions. The app could require extension authors to use the custom package type ContosoExtension
to identify their packages as proper extensions that follow the required conventions.
Warning
A package with a custom package type cannot be installed by Visual Studio or nuget.exe. See NuGet/Home#10468 for more information.
Package types can be set in the project file (.csproj
):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<PackageType>ContosoExtension</PackageType>
</PropertyGroup>
</Project>
Packages with multiple intended uses can be marked with multiple package types using the ;
delimiter:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<PackageType>PackageType1;PackageType2</PackageType>
</PropertyGroup>
</Project>
Package types can be versioned using a ,
delimiter between the package type and its Version
string:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<PackageType>PackageType1, 1.0.0.0;PackageType2</PackageType>
</PropertyGroup>
</Project>
The format of a package type string is exactly like a package ID. That is, a package type is a case-insensitive string matching the regular expression ^\w+([_.-]\w+)*$
having at least one character and at most 100 characters.
If provided, the package type version is a Version
string. The package type version is optional and defaults to 0.0
.