快速入門:建立並發佈使用 dotnet CLI 的套件

這個快速入門工具展示了如何從.NET類別函式庫快速建立 NuGet 套件,並透過 .NET 命令列介面或 dotnet CLI 發佈給 nuget.org。

先決條件

  • .NET SDK,提供 dotnet 命令列工具。 從 Visual Studio 2017 開始,dotnet CLI 會自動安裝任何 .NET 或 .NET Core 相關工作負載。

  • nuget.org 上的免費帳號。請依照 新增個人帳戶的指示操作。

建立類別庫專案

你可以使用現有的 .NET 類別庫專案來製作你想打包的程式碼,或像以下這樣建立一個簡單的專案:

  1. 建立一個名為 AppLogger 的資料夾。
  2. 打開命令提示字元,切換到 AppLogger 資料夾。 這個快速啟動中的所有 dotnet CLI 指令預設都是在目前的資料夾上執行。
  3. 輸入 dotnet new classlib,即可建立一個與目前資料夾名稱相同的專案。

如需詳細資訊,請參閱 dotnet new

將套件元資料加入專案檔案

每個 NuGet 套件都有一個清單,描述該套件的內容與依賴關係。 在最終套件中,清單是一個 .nuspec 檔案,使用你在專案檔案中包含的 NuGet 元資料屬性。

打開 .csproj.fsproj.vbproj 專案檔,並在現有 <PropertyGroup> 標籤中加入以下屬性。 使用你自己的名稱和公司值,並將套件識別碼替換成唯一值。

<PackageId>Contoso.08.28.22.001.Test</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>

這很重要

套件識別碼必須在 nuget.org 及其他套件來源間保持唯一。 發佈會讓套件公開可見,所以如果你使用範例 AppLogger 函式庫或其他測試函式庫,請使用包含 SampleTest的單一名稱。

你可以新增 NuGet metadata 屬性中描述的任何可選屬性。

備註

對於您為公眾使用而構建的套件,請特別注意該 PackageTags 屬性。 標籤可協助其他人找到您的包裹並了解它的作用。

執行 pack 命令

要從專案建立 NuGet 套件或 .nupkg 檔案,請執行 dotnet pack 指令,這也會自動建立專案。

dotnet pack

輸出顯示 .nupkg 檔案的路徑:

MSBuild version 17.3.0+92e077650 for .NET
  Determining projects to restore...
  Restored C:\Users\myname\source\repos\AppLogger\AppLogger.csproj (in 64 ms).
  AppLogger -> C:\Users\myname\source\repos\AppLogger\bin\Debug\net6.0\AppLogger.dll
  Successfully created package 'C:\Users\myname\source\repos\AppLogger\bin\Debug\Contoso.08.28.22.001.Test.1.0.0.nupkg'.

在建置時自動產生套件

要在執行dotnet pack時自動執行dotnet build,請在專案檔案中<PropertyGroup>加入以下一行:

    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>

發佈套件

dotnet nuget 推送指令,並附帶 nuget.org 提供的 API 金鑰,將你的 .nupkg 檔案發佈給 nuget.org。

備註

  • Nuget.org 會掃描所有上傳的套件是否有病毒,並拒絕含有病毒的套件。 Nuget.org 也會定期掃描所有現有的套件。

  • 你發佈給 nuget.org 的套件會對其他開發者公開可見,除非你將它們移除。 若要私下托管套件,請參閱「Hosting your own NuGet feeds」。

取得您的 API 金鑰

  1. 請登入你的 nuget.org 帳號 ,或如果你還沒有帳 號就另創 一個。

  2. 在右上角選擇你的使用者名稱,然後選擇 API 金鑰

  3. 選擇 「建立」,然後輸入你的金鑰名稱。

  4. [選取範圍] 底下,選取 [推送]。

  5. 「選擇套件」中,針對 Glob 圖案,請輸入星號(*)。

  6. 選取 ,創建

  7. 選取 [複製] 以複製新金鑰。

    nuget.org 頁面截圖,顯示新的 API 金鑰、關於立即複製金鑰的訊息,以及被高亮顯示的複製按鈕。

這很重要

  • 始終將您的 API 金鑰保密。 API 金鑰就像密碼,任何人都可以用來代表你管理套件。 如果意外洩露了您的 API 金鑰,請刪除或重新產生它。
  • 請將金鑰儲存在安全的位置,因為您以後無法再次複製金鑰。 如果您返回 API 金鑰頁面,則需要重新產生金鑰才能複製它。 如果您不想再推送套件,也可以移除 API 金鑰。

範疇設置 提供了一種為不同目的創建獨立 API 金鑰的方法。 每個金鑰都有有效期限,你可以將金鑰鎖定特定包裹或顆粒型態。 您也可以將每個金鑰的範圍定義為特定作業:推送新套件和套件版本、僅限推送新套件版本,或將其取消列出。

透過範圍設定,您可以為管理組織套件的不同人員建立 API 金鑰,以便他們只擁有所需的權限。

欲了解更多資訊,請參閱 Scoped API 金鑰。

使用 dotnet nuget push 推送發佈

從包含 .nupkg 檔案的資料夾中,執行下列命令。 用你的 <package-file> 檔案名稱替換,再用你的 API 金鑰替換<API-key>

dotnet nuget push <package-file> --api-key <API-key> --source https://api.nuget.org/v3/index.json

輸出會顯示發佈程序的結果:

Pushing <package-file> to 'https://www.nuget.org/api/v2/package'...
  PUT https://www.nuget.org/api/v2/package/
  Created https://www.nuget.org/api/v2/package/ 2891ms
Your package was pushed.

如需詳細資訊,請參閱 dotnet nuget push

發佈錯誤

執行指令 push 時,有時會遇到錯誤。 例如,在以下情況下你可能會收到錯誤:

  • 你的 API 金鑰無效或過期了。
  • 你嘗試發佈一個帶有主機上已存在識別碼的套件。
  • 你對已發佈的套件做了修改,但忘記在再次發佈前更新版本號。

錯誤訊息通常會標示問題的來源。

例如,假設識別碼 Contoso.App.Logger.Test 存在於 nuget.org。如果你嘗試發佈帶有該識別碼的套件,會收到以下錯誤:

Response status code does not indicate success: 403 (The specified API key is invalid, has expired, or does not have permission to access the specified package.).

為了解決這種情況,請檢查你的 API 金鑰的範圍、有效期限和值。 若金鑰有效,錯誤表示該套件識別碼已存在於主機上。 要解決這個問題,可以把套件識別碼改為唯一,重建專案,重建 .nupkg 檔案,然後重新嘗試指令 push

管理已發佈的套件

當您的包裹成功發布時,您會收到一封確認電子郵件。 要查看已發佈的套件,請點到 nuget.org,在右上角選擇你的使用者名稱,然後選擇 「管理套件」。

備註

你的包裹可能會花一段時間才能被索引並出現在搜尋結果中,讓其他人能找到。 在此期間,您的包裹會出現在 「未列出的包裹」中,包裹頁面會顯示以下訊息:

包裹尚未發布的 nuget.org 警告訊息截圖。文字說明驗證和索引可能需要一小時。

現在你的 NuGet 套件已經在 nuget.org 發佈,其他開發者可以在他們的專案中使用它。

如果你建立了一個沒用的套件(例如這個來自空類別函式庫的範例套件),或你不希望該套件被看見,你可以將該套件 取消列出 ,以隱藏它在搜尋結果中:

  1. 當套件出現在「管理套件」頁面的已發佈套件中後,選擇套件列表旁的鉛筆圖示。

    nuget.org 套件頁面的截圖。已發佈套件區塊列出一個套件。它的編輯圖示會被高亮亮出。

  2. 在下一頁,選擇「清單」,取消勾選「於搜尋結果中列出」勾選框,然後選擇「儲存」

    nuget.org 頁面截圖。在「商品」區塊中,會標示「在搜尋結果中列出包裹」的選項。

該套件現在會出現在「管理套件」的「未列出套件」中,並不再出現在搜尋結果中。

備註

為了避免測試套件在 nuget.org 上線,你可以推送到 nuget.org 測試站點 https://int.nugettest.org。請注意,上傳到 int.nugettest.org 的包裹可能不會被保存。

恭喜你創作並發佈了你的第一個 NuGet 套件!

在第 9頻道YouTube上可以找到更多NuGet影片。

下一步

請參閱更多關於如何使用 dotnet CLI 建立套件的詳細資訊:

想了解更多關於創建與發佈 NuGet 套件的資訊: