如何修改NuGet預設全局包文件夾的位置?

来源:https://www.cnblogs.com/zhaorong/archive/2023/07/21/how-to-change-nuget-global-folder.html
-Advertisement-
Play Games

由於一些歷史原因,重裝系統成為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 也使用此值。 值為 LowestHighestPatchHighestMinorHighest

  • 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預設值在 和 1MonoWindows 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>

方法二:設置環境變數

如果方法一不行,那就需要通過設置環境變數來指定全局包位置。

  1. 依次打開開始菜單--設置--系統--系統信息--高級系統設置,然後切換到“高級”選項卡,點擊“環境變數”按鈕打開環境變數設置視窗。

  1. 環境變數設置視窗分為用戶環境變數和系統環境變數,我的目的是為了騰磁碟空間的,所以這裡選擇設置到系統級別的環境變數(其實都差不多)。

  1. 點擊系統變數下方的新建按鈕,在彈出對話框中填寫變數名(NUGET_PACKAGES),通過瀏覽目錄選擇或直接在變數值輸入框內輸入新的全局包目錄。然後點擊確定按鈕。

  1. 確認新建成功後,在環境變數視窗點擊確定保存設置。
  2. 完成以上設置之後,新的設置會馬上生效(如果不放心可以重啟一下電腦),接下來可以把原先目錄裡面的包全部剪切到新目錄裡面。

點關註,不迷路。

如果您喜歡這篇文章,請不要忘記點贊、關註、轉發,謝謝!如果您有任何高見,歡迎在評論區留言討論……

公眾號


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 教程簡介 CodeIgniter 是一套給 PHP 網站開發者使用的應用程式開發框架和工具包。它提供單的介面和邏輯結構,其目的是使開發人員更快速地進行項目開發。使用 CodeIgniter可以減少代碼的編寫量,並將你的精力投入到項目的創造性開發上。 [CodeIgniter入門教程](http ...
  • redis是一個非常快速‎‎的非關係資料庫‎‎解決方案。其簡單的鍵值數據模型使 Redis 能夠處理大型數據集,同時保持令人印象深刻的讀寫速度和可用性。‎redis提供了五種數據類型,分別是是:1、string(字元串);2、hash(哈希);3、list(列表);4、set(集合);5、sort ... ...
  • 一、概念 **1、public和private** 兩個都是訪問許可權修飾符,用於控制外界對類內部成員的訪問。 * public:表明對象成員是完全共有的,外界可以隨意訪問。用public修飾的數據成員、成員函數是對所有用戶開放的,所有用戶都可以直接進行調用。 * private:表明對象成員是完全私 ...
  • 大數據、elasticsearch、實時搜索、search_as_you_type、Completion Suggester、查詢優化、首碼匹配、中綴匹配 ...
  • # 通用返回類Result > 前言:Java項目搭建時,常常需要去封裝一個通用型的Result工具類,下麵就是我自己封裝的常用的返回類,可以直接使用。(*有部分Swagger註解,使用時可忽略*) ### 第一步、創建ReusltUtils工具類 ```java package com.code. ...
  • 來源:toutiao.com/a6775476659416990212 ## **前言** 在SpringBoot框架中,我們使用最多的是Tomcat,這是SpringBoot預設的容器技術,而且是內嵌式的Tomcat。 同時,SpringBoot也支持Undertow容器,我們可以很方便的用Und ...
  • ## 什麼是 gRPC? gRPC 是由 Google 開發的高性能、開源的 RPC(Remote Procedure Call)框架,用於在客戶端和伺服器之間進行通信。它基於 Protocol Buffers(protobuf)進行消息序列化和反序列化,支持多種通信協議,如 HTTP/2、TCP ...
  • # UDP網路通信編程 - **基本介紹** 1. 類DatagramSocket和DatagramPacket實現了基於UDP協議網路程式。 2. UDP數據報通過數據報套接字DatagramSocket發送和接收,系統不保證UDP數據報一定能夠安全送到目的地,也不能確定什麼時候可以抵達。 3. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...