快速入門:使用 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 視窗中,輸入 AppLogger,Project 名稱,然後選擇 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 或你正在使用的主機上唯一的識別碼標識。 否則會發生錯誤。 在這個快速入門階段,我們建議在名稱中加入 Sample 或 Test ,因為發佈步驟會讓套件公開可見。

  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 的資訊,請參閱以下文章: