NuGet 套件包含開發人員可以在其專案中重複使用的程式碼。 無論您的程式碼執行或包含什麼,您都會使用命令列工具 或 nuget.exedotnet.exe來建立 NuGet 套件。
本文說明如何使用 dotnet CLI 建立套件。 從 Visual Studio 2017 開始,dotnet CLI 會包含在所有 .NET 和 .NET Core 工作負載中。 如果您需要安裝 dotnet CLI 或其他 NuGet 用戶端工具,請參閱 安裝 NuGet 用戶端工具。
本主題僅適用於 .NET 和其他使用 SDK 樣式格式的專案。 針對這些專案,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 轉換為所建立套件中的依賴項。 您可以透過IncludeAssets、ExcludeAssets和PrivateAssets標籤來控制要包含哪些資產。 如需詳細資訊,請參閱 控制相依性資產。
如需相依性、選擇性屬性和版本設定的詳細資訊,請參閱:
選擇唯一的套件識別碼並設定版本號碼
套件識別碼和版本號碼會唯一識別套件中包含的確切程式碼。
請遵循下列最佳實務來建立套件識別碼:
識別碼必須在 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 頁面上的 README 標籤頁上。 描述會從專案檔中的 <Description> 或 $description.nuspec 檔中的 提取。
下列範例顯示 .NET 套件的 Description 檔案中的 a:
<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 pack時自動執行dotnet build,將下列行新增至標籤中的<PropertyGroup>專案檔案:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
備註
當您自動產生套件時,封裝會增加專案的建置時間。
當在解決方案上執行dotnet pack時,會封裝該解決方案中所有可封裝的專案,也就是將IsPackable屬性設置為true。
測試套件安裝
在發佈套件之前,您應該測試將套件安裝到專案中。 測試可確保必要的檔案最終位於專案中的正確位置。
在 Visual Studio 中手動測試安裝,或使用一般 套件安裝程式在命令列上測試安裝。
這很重要
一旦建立,您就無法變更套件。 如果您更正問題,請變更套件內容並重新包裝。
重新建立套件之後,重新測試仍會使用舊版本的套件,直到您 清除全域套件資料夾為止。 清除資料夾對於未在每個組建上使用唯一發行前標籤的套件尤其重要。
後續步驟
建立套件之後,您可以將 .nupkg 檔案發佈至您選擇的主機。
如需擴充套件功能或支援其他案例的方法,請參閱下列文章: