每當安裝、更新或還原包時,NuGet 將管理項目結構多個文件夾之外的包和包信息:
name | 說明和位置(每個用戶) |
---|---|
global‑packages | global-packages 文件夾是 NuGet 安裝任何下載包的位置。 每個包完全展開到匹配包標識符和版本號的子文件夾。 使用 PackageReference 格式的項目始終直接從該文件夾中使用包。 使用 packages.config 時,包將安裝到 global-packages 文件夾,然后復制到項目的 packages 文件夾。
|
http‑cache | Visual Studio 包管理器 (NuGet 3.x+) 和 dotnet 工具存儲此緩存中下載包的副本(另存為 .dat 文件),這些副本被組織到每個包源的子文件夾中。 未展開包,且緩存中有 30 分鍾的到期時間。
|
temp | NuGet 在各操作期間在其中存儲臨時文件的文件夾。
|
plugins-cache 4.8 + | NuGet 存儲來自操作聲明請求的結果的文件夾。
|
備注
NuGet 3.5 和早期版本使用 %localappdata%\NuGet\Cache 中的 packages-cache 而不是 http-cache 。
通過使用緩存和 global-packages 文件夾,NuGet 通常會避免下載計算機上已存在的包,以提高安裝、更新和還原操作的性能。 在使用 PackageReference 時,global-packages 文件夾還會避免在項目文件夾中保存下載的包,其中它們可能會在無意間被添加到源代碼管理,並減少 NuGet 對計算機存儲的總體影響。
當要求檢索包時,NuGet 會首先查看 global-packages 文件夾。 如果不存在包的確切版本,NuGet 將檢查所有非 HTTP 包源。 如果仍未找到包,NuGet 將查找 http-cache 中的包,除非使用 dotnet.exe 命令指定 --no-cache,或使用 nuget.exe 命令指定 -NoCache。如果包不在緩存中,或未使用緩存,那么 NuGet 將通過 HTTP 檢索包。
有關詳細信息,請參閱安裝包時會發生什么情況?
查看文件夾位置
可以使用 nuget locals 命令查看位置:
cli復制
# Display locals for all folders: global-packages, http cache, temp and plugins cache nuget locals all -list
典型輸出(Windows;“user1”為當前用戶名):
output復制
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 命令查看文件夾位置:
.NET Core CLI復制
dotnet nuget locals all --list
典型輸出(Mac/Linux;“user1”為當前用戶名):
output復制
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
若要顯示單個文件夾的位置,請使用 http-cache
、global-packages
、temp
或 plugins-cache
,而不是 all
。
修改nuget包默認存放路徑
打開NuGet.Config 或C:\Program Files (x86)\NuGet\Config下的config文件,加上以下內容:
<
config
>
<
add
key="globalPackagesFolder" value="E:\packages" />
</
config
>
如上圖所示,改完后包將下載到此位置。
清除本地文件夾
如果安裝包時遇到問題或想要確保從遠程庫安裝包,請使用 locals --clear
選項 (dotnet.exe) 或 locals -clear
(nuget.exe),指定要清除的文件夾,或使用 all
清除所有文件夾:
cli復制
# 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 個字符。
縮短文件夾名稱,然后重試。