由於一些歷史原因,重灌系統成為Windows使用者解決疑難雜症的祖傳手藝。受此影響,給硬碟分割區幾乎成為了一種執念,少則C、D兩個盤,誇張一點的5~6個盤的也不是沒有。
PS:macOS和Linux一直都不鼓勵給磁碟分割區,雖然不禁止但也不提倡。隨著雲技術和寬頻的提升,越來越多的人更喜歡把自己認為比較重要的資料儲存在雲盤而不是本地磁碟,一是可以跨裝置存取,二來也不擔心突然有一天電腦損壞或者丟失。
前幾天正在寫程式碼的時候,突然收到一條IDE的提示,C槽空間不足!趕緊開啟檔案資源管理器看了一眼,喔嚯……C槽還剩足足1MB多的空間,沒藍屏算是給足我面子了。
接下來就是行雲流水般的三板斧:
砍完之後,可用空間提升到了9GB。但是也不夠啊,鬼知道什麼時候又只剩1MB了?用TreeSize分析了一下C槽的使用情況,發現.nuget資料夾的大小超過了10GB,雖然我在專案裡面做了一些設定,把當前專案用到的nuget包都存放在專案目錄下,而不是預設的全域性資料夾目錄,但是依然有很多系統程式以及LinqPad安裝的包會快取到預設目錄。
Windows預設的nuget包快取路徑是C:\Users\使用者名稱.nuget\packages。
masOS是/Users/使用者賬號/.nuget/packages
清理歷史版本可以騰出一些空間,但是治標不治本,如果某個程式或專案依賴於清理掉的版本,則可能被重新恢復或者乾脆報錯無法使用。那能不能把預設目錄指定到其他盤呢?
肯定能!
NuGet會在C:\Users\使用者\AppData\Roaming\NuGet\
生成一個NuGet.Config檔案,這是nuget的全域性組態檔,如果.net專案沒有單獨設定,則會使用全域性設定恢復、快取和讀取依賴包。
用文字編輯器開啟這個檔案,內容如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>
如果想新增其他包源,可以在packageSources裡面下增加相關節點:
<!--增加一個Nexus Repository服務作為nuget源-->
<add key="MyNuget" value="https://nexus.mydomainname.com/repository/nuget-hosted/index.json" />
<!--增加一個本地磁碟的資料夾作為nuget源-->
<add key="Test Source" value="D:\.nuget\packages" />
如果要修改全域性包目錄,需要在NuGet.config的config節點設定globalPackagesFolder(如果沒有config節點,需要手動新增一個),設定後的完整內容如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
<config>
<add key="globalPackagesFolder" value="D:\.nuget\packages" />
</config>
</configuration>
下面是config支援的設定項:
dependencyVersion(僅限於 packages.config
):包安裝、還原和更新的預設 DependencyVersion
值(未直接指定 -DependencyVersion
開關時)。 NuGet 包管理器 UI 也使用此值。 值為 Lowest
、HighestPatch
、HighestMinor
、Highest
。
globalPackagesFolder (僅使用 PackageReference 的專案):預設全域性包資料夾的位置。 預設值為 %userprofile%\.nuget\packages
(Windows) 或 ~/.nuget/packages
(Mac/Linux)。 相對路徑可在專案特定的 nuget.config
檔案中使用。 此設定由 NUGET_PACKAGES
環境變數替代,該變數優先。
repositoryPath(僅限於 packages.config
):安裝 NuGet 包的位置,而非預設的 $(Solutiondir)/packages
資料夾。 相對路徑可在專案特定的 nuget.config
檔案中使用。
defaultPushSource:如果操作未找到任何其他包源,則會標識應用作預設值的包源 URL 或路徑。
http_proxy http_proxy.user http_proxy.password no_proxy:連線到包源時要使用的代理設定;http_proxy
應為 http://<username>:<password>@<domain>
格式。 密碼已加密,且不能手動新增。 對於 no_proxy
,該值是繞過代理伺服器的域的列表(以逗號分隔)。 可將 http_proxy 和 no_proxy 環境變數交替用於這些值。
maxHttpRequestsPerSource:控制從 NuGet 傳送到每個包源的並行請求的最大數量,以便進行包依賴項解析和下載。 上的 dotnet.exe
預設值是從 Int32.MaxValue
屬性派生的 HttpClientHandler.MaxConnectionsPerServer
。 此設定對 沒有影響dotnet.exe``Mac OS
,因為限制設定為 16
以避免開啟檔案過多錯誤。 在 (如 )Visual Studio
上執行的 的NuGet client tools
預設值在 和 1
上Mono
為 Windows 64
。.NET Framework nuget.exe
樣式專案的 Packages.config
預設值設定為 Environment.ProcessorCount
。 將屬性設定為 maxHttpRequestsPerSource
小於預設值的值可能會影響 NuGet 效能。
signatureValidationMode:指定用於驗證包安裝和還原的包簽名的驗證模式。 accept
值為 、require
。 預設為 accept
。
<config>
<add key="dependencyVersion" value="Highest" />
<add key="globalPackagesFolder" value="c:\packages" />
<add key="repositoryPath" value="c:\installed_packages" />
<add key="http_proxy" value="http://company-squid:[email protected]" />
<add key="signatureValidationMode" value="require" />
<add key="maxHttpRequestsPerSource" value="16" />
</config>
如果方法一不行,那就需要通過設定環境變數來指定全域性包位置。
點關注,不迷路。
如果您喜歡這篇文章,請不要忘記點贊、關注、轉發,謝謝!如果您有任何高見,歡迎在評論區留言討論……