快速入門:使用 Visual Studio(.NET 框架,Windows)建立並發佈套件

使用 Microsoft Visual Studio,你可以從 .NET Framework 類別函式庫建立 NuGet 套件,然後使用 NuGet CLI 工具發佈給 nuget.org。

快速入門僅限 Windows 用戶使用。 如果你用的是 Visual Studio for Mac,請參考 dotnet CLI 工具

先決條件

  • 安裝適用於 Windows 並與任何 .NET 相關工作負載的 Visual Studio 2022。

    您可以從 visualstudio.microsoft.com免費安裝 2022 Community 版本,或使用 Professional 或 Enterprise 版本。

    Visual Studio 2017 及以上版本在安裝 .NET 工作負載時,會自動包含 NuGet 功能。

  • 如果您還沒有免費帳戶,請在 nuget.org注册免费帐户。 您必須先註冊並確認帳戶,才能上傳 NuGet 套件。

  • nuget.org 下載安裝 NuGet CLI。把 nuget.exe 檔案加入合適的資料夾,然後把該資料夾加入你的 PATH 環境變數。

建立類別庫專案

要建立類別函式庫專案,請依照以下步驟操作:

  1. 在Visual Studio中,選擇 File>New>Project

  2. Create a new project 視窗中,選擇下拉清單中的 C#Windows,以及 Library

  3. 在產生的專案範本清單中,選擇 Class Library (.NET Framework),然後選擇 Next

  4. Configure your new project 視窗中,輸入 AppLoggerProject 名稱,然後選擇 Create

  5. 為了確保專案建立正確,請選擇 「建置>建置解決方案」。 DLL 位於 Debug 資料夾(或如果你建置該設定則是 Release 資料夾)。

  6. (可選)在這個快速入門階段,你不需要為 NuGet 套件寫額外的程式碼,因為模板類別函式庫本身就足以建立套件。 不過,如果你想要這個範例套件的一些功能性程式碼,請包含以下程式碼:

    namespace AppLogger
    {
        public class Logger
        {
            public void Log(string text)
            {
                Console.WriteLine(text);
            }
        }
    }
    

    在現實世界的 NuGet 套件中,你很可能會實作許多其他使用者能用來建立應用程式的實用功能。 你也可以設定目標框架。 舉例可參考 UWP

為套件設定專案屬性

NuGet 套件包含一個清單(檔案 .nuspec ),其中包含相關的元資料,如套件識別碼、版本號、描述等。 部分元資料可直接從專案屬性擷取,避免在專案與清單中分別更新。 以下步驟說明如何設定適用的屬性:

  1. 選擇 Project > 屬性,然後選擇 Application 標籤。

  2. 對於 組裝名稱,給你的套件一個唯一的識別碼。 如果你嘗試發佈一個名稱已經存在的套件,你會看到錯誤。

    這很重要

    你必須給套件一個在 nuget.org 或你正在使用的主機上唯一的識別碼標識。 否則會發生錯誤。 在這個快速入門階段,我們建議在名稱中加入 SampleTest ,因為發佈步驟會讓套件公開可見。

  3. 選擇 組裝資訊,會顯示一個對話框,您可以輸入其他會帶入清單的屬性(參見 替換令牌)。 最常用的欄位包括 標題描述公司版權組裝版本。 因為這些屬性在你發佈套件後會出現在 nuget.org 主機上,務必確保它們具完整描述性。

    螢幕擷取畫面顯示 Visual Studio 中 .NET Framework 專案的組件資訊頁面。

  4. (可選)若要直接查看並編輯屬性,請在project中開啟Properties/AssemblyInfo.cs檔案,選擇 Project>Edit Project File

  5. 設定好這些屬性後,將 Active solution configuration 設為 Build>Configuration ManagerRelease,並重新建置專案以產生更新的 DLL。

產生初始清單

在你設定好專案屬性並建立 DLL 後,就可以從專案產生初始的 .nuspec 檔案。 此步驟包含相關的替換標記,以從專案檔案中擷取資訊。

只跑 nuget spec 一次就能產生初始清單。 如果你更新套件,請在專案中更改數值,或直接編輯清單:

  1. Solution Explorer 開啟專案後,選擇 Tools>Command Line>Developer Command Prompt

    命令提示字元會在包含 AppLogger.csproj 檔案的專案目錄中開啟。

  2. 執行下列命令:nuget spec AppLogger.csproj

    NuGet 會建立與專案名稱相符的清單,在此例 AppLogger.nuspec中為 。 清單中也包含替換代幣。

  3. 在文字編輯器中開啟 AppLogger.nuspec ,檢視其內容,內容將與以下程式碼相似:

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>Package</id>
        <version>1.0.0</version>
        <authors>Your username</authors>
        <owners>Your username</owners>
        <license type="expression">MIT</license>
        <!-- <icon>icon.png</icon> -->
        <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Package description</description>
        <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
        <copyright>Copyright 2022</copyright>
        <tags>Tag1 Tag2</tags>
      </metadata>
    </package>
    

編輯清單

  1. 在繼續之前,請先編輯以下屬性。 否則,如果你嘗試用預設值 .nuspec 建立 NuGet 套件,就會發生錯誤。 關於這些屬性的資訊,請參見 可選的元資料元素

    • licenseUrl
    • projectUrl
    • releaseNotes
    • 標記
  2. 對於為公開使用的套件,請特別注意標籤功能,因為標籤 幫助 他人找到你的套件並了解其功能。

  3. 你也可以在此時為清單新增其他元素,如 .nuspec 檔案參考中所述。

  4. 在繼續之前先儲存檔案。

執行 pack 命令

  1. Solution Explorer 開啟專案後,選擇 Tools>Command Line>Developer Command Prompt

    命令提示字元會在你的專案目錄中開啟。

  2. 執行下列命令:nuget pack

    NuGet 會在目前資料夾中產生一個以 identifier.version.nupkg 形式呈現的 .nupkg 檔案。

發佈套件

建立 .nupkg 檔案後,使用 NuGet CLI 並取得 nuget.org 的 API 金鑰發佈給 nuget.org。nuget.org 必須使用 nuget.exe 4.1.0 或更高版本。

如果你想在發佈公開圖庫前先測試和驗證套件,可以上傳到像 int.nugettest.org 這類測試環境,而不是 nuget.org。請注意,上傳到 int.nugettest.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 金鑰。

使用 NuGet CLI 發佈

使用 NuGet CLI(nuget.exe)是使用 .NET CLI 的替代方案:

  1. 打開命令提示字元,切換到包含 .nupkg 檔案的資料夾。

  2. 執行下列命令。 將套件檔名替換<成套件的檔名,並將 API 鍵值>替換<成你的 API> 鍵。 套件檔名是將你的套件 ID 和版本號合併而成,並加上 .nupkg 副檔名。 例如, AppLogger.1.0.0.nupkg

    nuget push <package filename> <api key value> -Source https://api.nuget.org/v3/index.json
    

    出版過程的結果如下所示:

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

更多資訊請參見 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 的包裹可能不會被保存。

下一步

恭喜你使用 Visual Studio .NET Framework 創建了 NuGet 套件。 請繼續閱讀下一篇文章,了解如何使用 NuGet CLI 建立 NuGet 套件。

想了解更多 NuGet 的資訊,請參閱以下文章: