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.
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.
Create a .NET project and learn to add packages and manage package dependencies in your project. Use the .NET Core CLI and NuGet registry to add libraries and tools to your C# applications through Visual Studio Code.