管理全域套件、快取和暫存資料夾
當您安裝、更新或還原套件時,NuGet 會管理專案結構之外數個資料夾中的套件和套件資訊:
名稱 | 描述和位置 (依使用者) |
---|---|
global-packages | global-packages 資料夾是 NuGet 安裝下載套件的位置。 每個套件已經完全展開至符合套件識別碼和版本號碼的子資料夾。 使用 PackageReference 格式的專案一律使用直接從此資料夾取得的套件。 當使用 packages.config 時,套件會安裝到 global-packages 資料夾,然後複製到專案的 packages 資料夾。
|
http-cache | Visual Studio 套件管理員 (NuGet 3.x+) 和 dotnet 工具會將下載的套件複本存放在此快取中 (另存為 .dat 檔案),並組織到每個套件來源的子資料夾。 套件不會展開,而且快取的到期時間為 30 分鐘。
|
temp | NuGet 在其各種作業期間存放暫存檔的資料夾。%temp%\NuGetScratch /tmp/NuGetScratch /tmp/NuGetScratch<username> |
plugins-cache 4.8+ | NuGet 在此資料夾中儲存來自作業宣告要求的結果。
|
注意
NuGet 3.5 和更早版本使用的是 packages-cache,而非位於 %localappdata%\NuGet\Cache
中的 http-cache。
NuGet 通常可使用快取和 global-packages 資料夾,以避免下載已經存在於電腦上的套件,藉此改善安裝、更新及還原作業的效能。 當使用 PackageReference 時,global-packages 資料夾也可避免將下載的套件保留在專案資料夾內 (以免可能會不小心新增到原始檔控制中),並降低 NuGet 對電腦儲存體的整體影響。
NuGet 需要擷取套件時,首先會尋找 global-packages 資料夾。 如果套件的正確版本不存在,NuGet 便會檢查所有非 HTTP 套件來源。 如果仍然找不到套件,除非您使用 dotnet.exe
命令指定 --no-http-cache
或使用 nuget.exe
命令指定 -NoHttpCache
,否則 NuGet 會尋找 http-cache 中的套件。 如果套件不在快取中,或者未使用快取,則 NuGet 會透過 HTTP 擷取套件。
如需詳細資訊,請參閱安裝套件後會發生什麼事。
檢視資料夾位置
您可以使用 nuget locals 命令來檢視位置:
# Display locals for all folders: global-packages, http cache, temp and plugins cache
nuget locals all -list
一般輸出 (Windows;"user1" 是目前使用者名稱):
http-cache: C:\Users\user1\AppData\Local\NuGet\v3-cache
global-packages: C:\Users\user1\.nuget\packages\
temp: C:\Users\user1\AppData\Local\Temp\NuGetScratch
plugins-cache: C:\Users\user1\AppData\Local\NuGet\plugins-cache
(package-cache
使用於 NuGet 2.x 中,並在 NuGet 3.5 及更早版本中出現)。
您可以使用 dotnet nuget locals 命令來檢視資料夾位置:
dotnet nuget locals all --list
一般輸出 (Mac;“user1” 是目前的使用者名稱:
info : http-cache: /home/user1/.local/share/NuGet/v3-cache
info : global-packages: /home/user1/.nuget/packages/
info : temp: /tmp/NuGetScratch
info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
一般輸出 (Linux;“user1” 是目前的使用者名稱:
info : http-cache: /home/user1/.local/share/NuGet/v3-cache
info : global-packages: /home/user1/.nuget/packages/
info : temp: /tmp/NuGetScratchuser1
info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
若要顯示單一資料夾的位置,請使用 http-cache
、global-packages
、temp
或 plugins-cache
,不要使用 all
。
清除本機資料夾
如果遇到套件安裝問題,或想要確保安裝的是遠端資源庫的套件,請使用 locals --clear
選項 (dotnet.exe) 或 locals -clear
(nuget.exe),指定要清除的資料夾,或 all
以清除所有資料夾:
# Clear the 3.x+ cache (use either command)
dotnet nuget locals http-cache --clear
nuget locals http-cache -clear
# Clear the 2.x cache (NuGet CLI 3.5 and earlier only)
nuget locals packages-cache -clear
# Clear the global packages folder (use either command)
dotnet nuget locals global-packages --clear
nuget locals global-packages -clear
# Clear the temporary cache (use either command)
dotnet nuget locals temp --clear
nuget locals temp -clear
# Clear the plugins cache (use either command)
dotnet nuget locals plugins-cache --clear
nuget locals plugins-cache -clear
# Clear all caches (use either command)
dotnet nuget locals all --clear
nuget locals all -clear
目前在 Visual Studio 中開啟且由專案使用的任何套件不會從 global-packages 資料夾清除。
從 Visual Studio 2017 開始,使用 [工具 > NuGet 封裝管理員 封裝管理員 > [設定] 功能表命令,然後選取 [清除所有 NuGet 快取]。 目前無法透過套件管理員主控台來管理快取。 在 Visual Studio 2015 中,請改用 CLI 命令。
疑難排解錯誤
使用 nuget locals
或 dotnet nuget locals
時,可能會發生下列錯誤:
錯誤:進程無法存取檔案 <套件,因為檔案套件> 正由另一個進程 或 清除本機資源失敗:無法刪除一或多個檔案
其他處理序正在使用資料夾內的一或多個檔案;例如,Visual Studio 專案已開啟,其中參照 global-packages 資料夾中的套件。 關閉這些處理序,並再試一次。
錯誤:拒絕存取路徑或<>目錄不是空的
您沒有刪除此快取中檔案的權限。 如果可能,請變更資料夾權限,並再試一次。 否則,請洽詢系統管理員。
錯誤:「指定的路徑、檔案名稱或兩者都太長。 完整的檔名必須少於 260 個字元,並且目錄名稱必須少於 248 個字元。」
請縮短資料夾名稱,並再試一次。