由於一些歷史原因,重裝系統成為Windows用戶解決疑難雜症的祖傳手藝。受此影響,給硬碟分區幾乎成為了一種執念,少則C、D兩個盤,誇張一點的5~6個盤的也不是沒有。 > PS:macOS和Linux一直都不鼓勵給磁碟分區,雖然不禁止但也不提倡。隨著雲技術和寬頻的提升,越來越多的人更喜歡把自己認為比較 ...
由於一些歷史原因,重裝系統成為Windows用戶解決疑難雜症的祖傳手藝。受此影響,給硬碟分區幾乎成為了一種執念,少則C、D兩個盤,誇張一點的5~6個盤的也不是沒有。
PS:macOS和Linux一直都不鼓勵給磁碟分區,雖然不禁止但也不提倡。隨著雲技術和寬頻的提升,越來越多的人更喜歡把自己認為比較重要的資料存儲在雲盤而不是本地磁碟,一是可以跨設備訪問,二來也不擔心突然有一天電腦損壞或者丟失。
前幾天正在寫代碼的時候,突然收到一條IDE的提示,C盤空間不足!趕緊打開文件資源管理器看了一眼,喔嚯……C盤還剩足足1MB多的空間,沒藍屏算是給足我面子了。
接下來就是行雲流水般的三板斧:
- 退出應用程式(物理記憶體不足的時候會划出一部分磁碟空間作為虛擬記憶體,C盤根目錄下的pagefile.sys就是虛擬記憶體生成的文件,我看了一下,20+GB,也不敢刪,只能眼睜睜看著它把磁碟空間蠶食掉)
- 清理垃圾文件
- 重啟電腦
砍完之後,可用空間提升到了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>
方法二:設置環境變數
如果方法一不行,那就需要通過設置環境變數來指定全局包位置。
- 依次打開開始菜單--設置--系統--系統信息--高級系統設置,然後切換到“高級”選項卡,點擊“環境變數”按鈕打開環境變數設置視窗。
- 環境變數設置視窗分為用戶環境變數和系統環境變數,我的目的是為了騰磁碟空間的,所以這裡選擇設置到系統級別的環境變數(其實都差不多)。
- 點擊系統變數下方的新建按鈕,在彈出對話框中填寫變數名(NUGET_PACKAGES),通過瀏覽目錄選擇或直接在變數值輸入框內輸入新的全局包目錄。然後點擊確定按鈕。
- 確認新建成功後,在環境變數視窗點擊確定保存設置。
- 完成以上設置之後,新的設置會馬上生效(如果不放心可以重啟一下電腦),接下來可以把原先目錄裡面的包全部剪切到新目錄裡面。
點關註,不迷路。
如果您喜歡這篇文章,請不要忘記點贊、關註、轉發,謝謝!如果您有任何高見,歡迎在評論區留言討論……