NuGet 包包含开发人员可在项目中重复使用的代码。 无论代码包含什么,你都使用命令行工具nuget.exedotnet.exe创建 NuGet 包。
本文介绍如何使用 dotnet CLI 创建包。 从 Visual Studio 2017 开始,dotnet CLI 包含在所有 .NET 和 .NET Core 工作负载中。 如果需要安装 dotnet CLI 或其他 NuGet 客户端工具,请参阅 安装 NuGet 客户端工具。
本主题仅适用于使用 SDK 样式格式的 .NET 和其他项目。 对于这些项目,NuGet 使用项目文件中的信息来创建包。 有关快速入门教程,请参阅 使用 dotnet CLI 创建包 或使用 Visual Studio 创建包。
MSBuild msbuild -t:pack 命令在功能上等效于 dotnet pack。 有关使用 MSBuild 创建包的详细信息,请参阅 使用 MSBuild 创建 NuGet 包。
注释
若要为非 SDK 样式项目(通常是 .NET Framework 项目)创建和发布包,请参阅 使用 nuget.exe CLI 创建包 ,或使用 Visual Studio(.NET Framework)创建和发布包。
对于从 packages.config 迁移到 PackageReference 的项目,请使用
msbuild -t:pack。 有关详细信息,请参阅 迁移后创建包。
设置属性
可以使用命令创建示例类库项目 dotnet new classlib ,并使用以下命令打包项目 dotnet pack。 该 dotnet pack 命令使用以下属性。 如果未在项目文件中指定值,该命令将使用默认值。
-
PackageId(包标识符)必须在 nuget.org 和承载包的任何其他目标中是唯一的。 如果未指定值,该命令将使用 .AssemblyName -
Version是表单Major.Minor.Patch[-Suffix]中的特定版本号,用于-Suffix标识 预发行版版本。 如果未指定,默认值为1.0.0。 -
Authors是包的作者。 如果未指定,则默认值为AssemblyName. -
Company是公司信息。 如果未指定,则默认值为Authors值。 -
Product是产品信息。 如果未指定,则默认值为AssemblyName.
在 Visual Studio 中,可以在项目属性中设置这些值。 右键单击 解决方案资源管理器中的项目,选择 “属性”,然后选择“ 包 ”部分。 还可以将属性直接添加到 .csproj 或其他项目文件。
以下示例显示了添加包属性的项目文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>UniqueID</PackageId>
<Version>1.0.0</Version>
<Authors>Author Name</Authors>
<Company>Company Name</Company>
<Product>Product Name</Product>
</PropertyGroup>
</Project>
可以添加其他可选属性,例如 Title, PackageDescription和 PackageTags。
注释
对于为公共使用而生成的包,请特别注意该 PackageTags 属性。 标记可帮助其他人找到你的包并了解它的作用。
此命令 dotnet pack 会自动将 PackageReference项目文件中的依赖项转换为所创建的包中的依赖项。 可以控制要通过IncludeAssetsExcludeAssetsPrivateAssets标记包括哪些资产。 有关详细信息,请参阅 控制依赖项资产。
有关依赖项、可选属性和版本控制的详细信息,请参阅:
选择唯一的包标识符并设置版本号
包标识符和版本号唯一标识包中包含的确切代码。
按照以下最佳做法创建包标识符:
该标识符必须在 nuget.org 和承载包的所有其他位置 唯一。 为了避免冲突,良好的模式是使用公司名称作为标识符的第一部分。
使用点符号表示法,遵循 .NET 命名空间式命名约定。 例如,使用
Contoso.Utility.UsefulStuff而不是Contoso-Utility-UsefulStuff或Contoso_Utility_UsefulStuff。 如果将包标识符与代码使用的命名空间匹配,这对使用者也很有帮助。如果生成示例 代码 包,演示如何使用另一个包,请追加
.Sample到标识符,如中所示Contoso.Utility.UsefulStuff.Sample。示例包依赖于原始包。 创建示例包时,请添加值为
<IncludeAssets>的contentFiles。 在 内容 文件夹中,排列名为 \Samples\<identifier> 的文件夹中的示例代码,例如 \Samples\Contoso.Utility.UsefulStuff.Sample。
遵循以下最佳做法设置包版本:
通常,将包版本设置为 与项目或程序集版本匹配,尽管这并非严格要求。 将包限制为单个程序集时,匹配版本非常简单。 NuGet 本身在解析依赖项时处理包版本,而不是程序集版本。
如果使用非标准版本方案,请务必考虑 NuGet 版本控制规则 ,如 包版本控制中所述。 NuGet 主要符合 语义版本控制 2.0.0。
注释
有关依赖项解析的详细信息,请参阅 带 PackageReference 的依赖项解析。 有关可能有助于了解版本控制的信息,请参阅以下系列博客文章:
添加可选说明字段
包的可选说明显示在包 nuget.org 页的 自述 文件选项卡上。 说明从项目文件中的
以下示例展示了 Description 文件中 .NET 包的 。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>Azure.Storage.Blobs</PackageId>
<Version>12.4.0</Version>
<PackageTags>Microsoft Azure Storage Blobs;Microsoft;Azure;Blobs;Blob;Storage;StorageScalable</PackageTags>
<Description>
This client library enables working with the Microsoft Azure Storage Blob service for storing binary and text data.
For this release see notes - https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/README.md and https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md
in addition to the breaking changes https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/BreakingChanges.txt
Microsoft Azure Storage quickstarts and tutorials - https://learn.microsoft.com/azure/storage/
Microsoft Azure Storage REST API Reference - https://learn.microsoft.com/rest/api/storageservices/
REST API Reference for Blob Service - https://learn.microsoft.com/rest/api/storageservices/blob-service-rest-api
</Description>
</PropertyGroup>
</Project>
运行 pack 命令
若要生成 NuGet 包或 .nupkg 文件,请从项目文件夹运行 dotnet pack 命令,这也会自动生成项目。
dotnet pack
输出显示 .nupkg 文件的路径:
MSBuild version 17.3.0+92e077650 for .NET
Determining projects to restore...
Restored D:\proj\AppLoggerNet\AppLogger\AppLogger.csproj (in 97 ms).
Successfully created package 'D:\proj\AppLoggerNet\AppLogger\bin\Debug\AppLogger.1.0.0.nupkg'.
构建时自动生成软件包
要在每次运行dotnet build时自动运行dotnet pack,请将以下行添加到<PropertyGroup>标记中的项目文件中。
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
注释
自动生成包时,打包会增加项目的生成时间。
在解决方案中运行dotnet pack会打包解决方案中所有可以打包的项目,也就是说,属性IsPackable设置为true。
测试包安装
在发布包之前,应测试将包安装到项目中。 测试可确保必要的文件最终出现在项目中的正确位置。
使用常规 包安装过程在 Visual Studio 或命令行中手动测试安装。
重要
创建包后,无法更改包。 如果更正了问题,请更改包内容并重新打包。
重新创建包后,重新测试仍使用旧版本的包,直到 清除全局包文件夹。 清除文件夹对于那些每次构建不使用唯一预发行版标签的软件包尤其重要。
后续步骤
创建包后,可以将 .nupkg 文件发布到所选主机。
有关扩展包的功能或支持其他方案的方法,请参阅以下文章: