使用nuget.exe快速取消與啟用nuget package source

使用nuget.exe快速取消與啟用nuget package source

在進行一個 Visual Studio Core + Entity Framework Core 測試程式時,在新增套件時,不斷跑出「無法載入來源」的錯誤,然後停止安裝。

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
  Writing C:\Users\BruceChen\AppData\Local\Temp\tmp1C89.tmp
info : 正在將套件 'Microsoft.EntityFrameworkCore.Sqlite' 的 PackageReference 新增至專案 'D:\Temp\EFCoreFirst\EFCoreFirst.csproj'。
info : 正在還原 D:\Temp\EFCoreFirst\EFCoreFirst.csproj 的封裝...
info :   GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/index.json
error: 無法載入來源 https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/BestFeed/nuget/v3/index.json 的服務索引。
error:   Response status code does not indicate success: 401 (Unauthorized).

公司電腦有設定其他 Azure DevOps NuGet package source:

VS - NuGet package Sources

當然,我們可以如上圖,把 Visual Studio 打開,再一層一層打開組態,把要取消的 package sources 勾勾給取消。但既然在 Visual Studio Code 裡,那有無辦法不開 Visual Studio 來解決。

第一個當然找 dotnet add package 指令,發現裡面有個 [-s|--source] 可以指定來源。不過指定之後,還是出現一樣 401 (Unauthorized) 錯誤。

第二個想法,那有無辦法和 Visual Studio 的組態一樣,先暫先取消私有 NuGet package sorces。

nuget.exe

NuGet 本身也有提供 CLI,也就是 nuget.exe。nuget.exe 需要額外下載:https://www.nuget.org/downloads

  • NuGet.exe 5.0 及更新版本需要.NET Framework 4.7.2 或更新版本才能執行。
  • nuget.exe 下載之後就只是一支 .exe,可以加入環境變數 PATH 或直接執行。

nuget.exe helpnuget.exe ? 就能查詢指令說明。

D:\Downloads>nuget.exe help
NuGet Version: 5.4.0.6315
usage: NuGet <command> [args] [options]
Type 'NuGet help <command>' for help on a specific command.

Available commands:

 add               Adds the given package to a hierarchical source. http sources are not supported. For more info, goto https://docs.nuget.org/consume/command-line-reference#add-command.

 config            取得或設定 NuGet 設定值。

 delete            從伺服器刪除封裝。

 help (?)          顯示一般說明資訊以及其他命令的相關說明資訊。

 init              Adds all the packages from the <srcPackageSourcePath> to the hierarchical <destPackageSourcePath>. http feeds are not supported. For more info, goto https://docs.nuget.org/consume/command-line-reference#init-command.

 install           使用指定來源安裝封裝。如果沒有指定來源,在 NuGet 設定檔中定義的所有來源均已使用。如果設定檔並未指定來源,請使用預設 NuGet 摘要。

 list              顯示給定來源的封裝清單。如果未指定來源,已使用 %AppData%\NuGet\NuGet.config 中定義的所有來源。如果 NuGet.config 並未指定來源,使用預設的 NuGet 摘要。

 locals            Clears or lists local NuGet resources such as http requests cache, temp cache or machine-wide global packages folder.

 pack              依指定的 nuspec 或專案檔建立 NuGet 封裝。

 push              將套件推向伺服器並發佈。
                   NuGet 的預設設定可載入 %AppData%\NuGet\NuGet.config 以取得,接著載入任何從磁碟根啟動且在目前目錄中結束的 nuget.config 或 .nuget\nuget.config。

 restore           還原 NuGet 封裝。

 setApiKey         儲存給定伺服器 URL 的 API 索引鍵。若未提供 URL,會為 NuGet 陳列庫儲存 API 索引鍵。

 sign              Signs a NuGet package with the specified certificate.

 sources           提供管理位於 %AppData%\NuGet\NuGet.config 的來源清單的功能。

 spec              為新封裝產生 nuspec。如果此命令在與專案檔 (.csproj, .vbproj, .fsproj) 相同資料夾中執行,則會建立 Token 化的 nuspec 檔案。

 trusted-signers   Provides the ability to manage the list of trusted signers.

 update            更新封裝為可用的最新版本。此命令也會更新 NuGet.exe 本身。

 verify            Verifies a signed NuGet package.

如需詳細資訊,請造訪 https://docs.nuget.org/docs/reference/command-line-reference

很快就能發現關鍵字 nuget sources

nuget sources Disable -Name "MyServer"
nuget sources Enable -Name "MyServer"

nuget.exe sources Disable 預設會修改 %AppData%\NuGet\NuGet.Config 組態檔,它會在最下面加上 <disabledPackageSources> 組態:

<disabledPackageSources>
    <add key="MyServer" value="true" />
</disabledPackageSources>

sources Enable 則是移除此組態。這樣就能在 Visual Studio Code 快速去開關 nuget package sources。或是寫成一支 .bat 也是不錯的選擇。

1 則留言:

  1. 請問 nuget cli 可以修改 machine level 的 nuget.config 嗎

    回覆刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。