NuGet管理全局包、緩存和臨時文件夾


每當安裝、更新或還原包時,NuGet 將管理項目結構多個文件夾之外的包和包信息:

 

name 說明和位置(每個用戶)
global‑packages global-packages 文件夾是 NuGet 安裝任何下載包的位置。 每個包完全展開到匹配包標識符和版本號的子文件夾。 使用 PackageReference 格式的項目始終直接從該文件夾中使用包。 使用 packages.config 時,包將安裝到 global-packages 文件夾,然后復制到項目的 packages 文件夾。
  • Windows:%userprofile%\.nuget\packages
  • Mac/Linux:~/.nuget/packages
  • 使用 NUGET_PACKAGES 重寫環境變量 globalPackagesFolder 或 repositoryPath 配置設置(分別在使用 PackageReference 和 packages.config 時)或 RestorePackagesPath MSBuild 屬性(僅限 MSBuild)。 環境變量優先於配置設置。
http‑cache Visual Studio 包管理器 (NuGet 3.x+) 和 dotnet 工具存儲此緩存中下載包的副本(另存為 .dat 文件),這些副本被組織到每個包源的子文件夾中。 未展開包,且緩存中有 30 分鍾的到期時間。
  • Windows:%localappdata%\NuGet\v3-cache
  • Mac/Linux:~/.local/share/NuGet/v3-cache
  • 使用 NUGET_HTTP_CACHE_PATH 環境變量替代。
temp NuGet 在各操作期間在其中存儲臨時文件的文件夾。
  • Windows:%temp%\NuGetScratch
  • Mac/Linux:/tmp/NuGetScratch
plugins-cache 4.8 + NuGet 存儲來自操作聲明請求的結果的文件夾。
  • Windows:%localappdata%\NuGet\plugins-cache
  • Mac/Linux:~/.local/share/NuGet/plugins-cache
  • 使用 NUGET_PLUGINS_CACHE_PATH 環境變量替代。

 

備注

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-cacheglobal-packagestemp 或 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 個字符。

縮短文件夾名稱,然后重試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM