使用 NuGet.exe 從命令列發佈 NuGet 套件

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022

本文將引導你如何透過兩種認證流程連接你的訂閱源與發佈套件:針對你組織內的訂閱源使用Azure Artifacts憑證提供者,以及用於不同組織中託管訂閱源的個人存取權杖(PAT)。

先決條件

  • 一個 Azure DevOps 組織。
  • An Azure DevOps project.
  • An Azure Artifacts feed.
  • nuget.exe4.8.0.5385 或更新版本。 Azure Artifacts 推薦 NuGet 5.5.x 或更新版本,以獲得最佳的相容性和穩定性。
  • 要發佈套件,您必須是 Feed Publisher(貢獻者)或以上。

設定 Azure Artifacts Credential Provider

Azure Artifacts 憑證提供者能安全認證您的 Azure Artifacts 資料。 要搭配 nuget.exe使用,必須先將其加入 NuGet 的外掛搜尋路徑。 詳情請參見 外掛安裝與發現。 外掛加入後,請依照作業系統的安裝步驟操作:

請使用以下方法之一安裝 Azure Artifacts 憑證提供者:

手動安裝

  1. 下載最新的 Microsoft.NetFx48.NuGet.CredentialProvider.zip 版本。

  2. 擷取 zip 檔案。

  3. 將解壓壓縮檔中的資料夾複製 netfx 到 %UserProfile%/.nuget/plugins/。 這個 netfx 資料夾是為了 nuget.exe 相容性所必需的。

使用 Helper 腳本安裝

或者,你也可以使用自動輔助腳本來簡化安裝流程。 確保你有 PowerShell 5.1 或更新版本,然後執行:

iex "& { $(irm https://aka.ms/install-artifacts-credprovider.ps1) } -AddNetfx"

欲了解更多資訊,請參閱 Azure Artifacts憑證提供者 資料庫。

連接到資料來源

在發佈套件之前,請先設定專案並連結到你的訂閱源,步驟如下:

  1. 登入您的 Azure DevOps 組織,然後流覽至您的專案。

  2. 選取 工件,然後從下拉功能表中選取您的資訊來源。

  3. 選取 [連線至摘要],然後從左側瀏覽窗格中選取 [NuGet.exe]。

  4. 在你的專案中新增一個 nuget.config 檔案,放在和你的 .csproj or .sln 檔案同一個資料夾裡。 將提供的 XML 代碼段貼到您的檔案中。 代碼段看起來應該如下所示:

    • 組織範圍的動態消息:

      <?xml version="1.0" encoding="utf-8"?>
      <configuration>
        <packageSources>
          <clear />
          <add key="<SOURCE_NAME>" value="https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" />
        </packageSources>
      </configuration>
      
    • 專案範圍的資訊流:

      <?xml version="1.0" encoding="utf-8"?>
      <configuration>
        <packageSources>
          <clear />
          <add key="<SOURCE_NAME>" value="https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" />
        </packageSources>
      </configuration>
      
  1. 登入您的 Azure DevOps 伺服器,然後流覽至您的專案。

  2. 選取 [工件],接着選取您的資料流。

  3. 選取 [連接到動態消息],然後從左側導覽窗格中選取 [NuGet.exe]。

  4. 在你的專案中加入 nuget.config 一個檔案,放在與你的 .csproj or .sln 檔案相同的資料夾,然後將提供的 XML 片段貼到你的檔案中。

發佈到同一組織的訂閱源

在使用 Azure Artifacts 憑證提供者設定nuget.config並驗證後,執行以下指令將套件發佈到你的訂閱源。 將佔位符替換為適當的值:

nuget push <PACKAGE_PATH> -Source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -ApiKey <ANY_STRING>

範例:

nuget push MyPackage.5.0.2.nupkg -Source https://pkgs.dev.azure.com/MyOrg/MyProject/_packaging/MyFeed/nuget/v3/index.json -ApiKey AZ

注意

Azure Artifacts 憑證提供者負責推送的真實認證,但 NuGet 仍然需要一個-ApiKey值才能接受該指令。 Azure Artifacts 忽略你提供的值,所以任何非空字串都適用。

發佈到其他組織的訂閱源

如果目標訂閱源屬於不同的 Azure DevOps 組織,請在該組織中建立 PAT,並將該訂閱源加入你的nuget.config檔案中。

  1. 在目標組織中建立 個人存取權杖(PAT),並將 封裝>讀取與寫入 設為其範圍。

  2. 執行以下指令將該資訊流加入來源。 這個指令會將你的 PAT 新增至 nuget.config,因此請妥善保存該檔案,並且不要將它提交到原始碼控制。

    nuget sources Add -Name <SOURCE_NAME> -Source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -UserName <USER_NAME> -Password <PERSONAL_ACCESS_TOKEN> -config <PATH_TO_NUGET_CONFIG_FILE>
    
  3. 用你剛加入的來源名稱發佈套件。

    nuget push <PACKAGE_PATH> -Source <SOURCE_NAME> -ApiKey <ANY_STRING>
    

範例:

nuget sources Add -Name "MySource" -Source https://pkgs.dev.azure.com/MyOrg/MyProject/_packaging/MyFeed/nuget/v3/index.json -UserName MyUserName -Password YourPersonalAccessToken -config ./nuget.config
nuget push nupkgs/mypackage.1.1.8.nupkg -Source MySource -ApiKey AZ

注意

如果您的組織使用防火牆或代理伺服器,請允許使用 Azure Artifacts 網域的 URL 和 IP 位址。

Troubleshooting

驗證提示不出現

請確認 Azure Artifacts 憑證提供者已安裝,且使用 NuGet 版本4.8.0.5385或更新版本。 關於設定步驟,請參見「用 NuGet.exe連接Azure Artifacts串流」。

發佈失敗是因為該版本已經存在

Azure Artifacts 中的套件版本不可變更。 發佈版本後,即使刪除套件,也無法覆寫或重複使用相同的版本號。 更新套件版本,重建套件,然後再發佈。

透過防火牆或 Proxy 發佈時失敗

允許 Azure Artifacts 網域的 URL 和 IP 位址,然後重新嘗試發佈操作。

發佈失敗時出現 403 錯誤

這個錯誤通常代表你的帳號在動態消息上沒有發佈權限。 你至少需要 Feed Publisher(貢獻者)這個角色來推送套件。 請一位 Feed 擁有者更新你的角色,然後再試一次。