由于一些历史原因,重装系统成为Windows用户解决疑难杂症的祖传手艺。受此影响,给硬盘分盘几乎成为了一种执念,少则C、D两个盘,夸张一点的5~6个盘的也不是没有。

PS:macOS和Linux一直都不鼓励给磁盘分区,虽然不禁止但也不提倡。随着云技术和宽带的提升,越来越多的人更喜欢把自己认为比较重要的资料存储在云盘而不是本地磁盘,一是可以跨设备访问,二来也不担心突然有一天电脑损坏或者丢失。

前几天正在写代码的时候,突然收到一条IDE的提示,C盘空间不足!赶紧打开文件资源管理器看了一眼,喔嚯……C盘还剩足足1MB多的空间,没蓝屏算是给足我面子了。

接下来就是行云流水般的三板斧:

  • 退出应用程序(物理内存不足的时候会划出一部分磁盘空间作为虚拟内存,C盘根目录下的pagefile.sys就是虚拟内存生成的文件,我看了一下,20+GB,也不敢删,只能眼睁睁看着它把磁盘空间蚕食掉)
  • 清理垃圾文件
  • 重启电脑

砍完之后,可用空间提升到了9GB。但是也不够啊,鬼知道什么时候又只剩1MB了?用TreeSize分析了以下C盘的使用情况,发现.nuget文件夹的大小超过了10GB,虽然我在项目里面放了NuGet.config,把当前项目用到的nuget包都存放在项目目录下,而不是默认的.nuget文件夹里面,但是依然有很多系统程序用到的包已经LinqPad安装的包会缓存到默认目录。

Windows默认的nuget包缓存路径是C:\Users\用户名.nuget\packages。

masOS是/Users/用户账号/.nuget/packages

清理历史版本可以腾出一些空间,但是治标不治本,如果某个程序或项目依赖于清理掉的版本,则可能被重新恢复或者干脆报错无法使用。那能不能把默认目录改成其他盘的呢?

肯定能!

方法一:修改全局配置文件

安装nuget后,会在C:\Users\用户\AppData\Roaming\NuGet\生成一个NuGet.Config文件,这是nuget的全局配置文件,如果.net项目没有单独配置nuget,则会使用全局配置恢复、缓存和读取依赖包。

用文本编辑器打开这个文件,内容如下:

<?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,配置后的完整内容如下:

<?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:3128@contoso.com" />
<add key="signatureValidationMode" value="require" />
<add key="maxHttpRequestsPerSource" value="16" />
</config>

方法二:设置环境变量

如果方法一不行,则可以通过设置环境变量来指定全局包位置。

  1. 通过开始菜单--设置--系统--系统信息打开高级系统设置,然后切换到“高级”选项卡,点击“环境变量”按钮打开环境变量设置对话框

  1. 环境变量设置窗口分为用户环境变量和系统环境变量,我的目的是为了腾磁盘空间的,所以这里我选择设置到系统级别的环境变量(其实都差不多)。

  1. 点击系统变量下方的新建按钮,在弹出对话框中填写变量名(NUGET_PACKAGES),通过浏览目录选择或直接在变量值输入框内输入新的全局包目录。然后点击确定按钮。

  1. 确认新建成功后,在环境变量窗口点击确定保存配置。
  2. 完成以上设置之后,新的配置会马上生效(如果不放心可以重启一下电脑),我们可以把C盘的packages目录里面的包全部剪切到新目录里面。

点关注,不迷路。

如果您喜欢这篇文章,请不要忘记点赞、关注、转发,谢谢!如果您有任何高见,欢迎在评论区留言讨论……

如何修改NuGet默认全局包文件夹的位置?的更多相关文章

  1. npm的.npmrc文件在哪里?缓存及全局包文件在什么位置?

    npm的.npmrc文件在哪里?缓存及全局包文件在什么位置?   npm作为node开发过程中的必备工具,长期使用之后,您可能会想:这些全局安装的node包都放在硬盘里面的哪个地方?配置文件.npmr ...

  2. Jupyter Notebook 修改默认打开的文件夹的位置

    初次使用Jupyter Notebook,确实好用啊!!,又好看又好用,不过还是遇到了一个问题,安装好之后,打开Jupyter Notebook 的时候,默认的文件夹的位置是C盘下面的XXX目录,但是 ...

  3. 【Sonarqube】windows下更改Temp文件夹的位置

    下载的最新Sonarqube版本(4.5.1),通过StartSonar.bat文件可以启动,但是无法通过StartNTService.bat文件启动,原因为默认的Temp文件不可写入, java.l ...

  4. Flask--修改默认的static文件夹的方法

    修改的flask默认的static文件夹只需要在创建Flask实例的时候,把static_folder和static_url_path参数设置为空字符串即可. app = Flask(__name__ ...

  5. htm中的 src未指定具体路径的话 默认查找当前文件夹

    htm中的 src未指定具体路径的话 默认查找当前文件夹

  6. .NET Core 发布时去掉多余的语言包文件夹

    用 .NET Core 3.x 作为目标框架时发布完之后,会发现多了很多语言包文件夹,类似于: 有时候,不想要生成这些语言包文件夹,需要稍微配置一下. 在 PropertyGroup 节点中添加如下的 ...

  7. Windows 特殊文件夹的位置

    发送到文件夹的位置 %APPDATA%\Microsoft\Windows\SendTo

  8. android 自己制作Jar包 和 修改 现成的 Jar包文件

    先看如何创建自己的 Jar 包 里面随便写个方法 public int add(int a,int b){ return (a+b); } task makeJar(type: Copy) { del ...

  9. VS2017开发.net core 时默认发布路径文件夹多个BPC

    新安装的VS2017,编译后进行发布,结果在bin文件夹下多了个BPC文件夹,很是费解,查了资料才知道是VS2017默认设置了环境变量.在此记录下,如果不需要默认路径可修改环境变量,具体操作如下: 我 ...

  10. eclipse部署class默认在build文件夹

    1.eclipse新建的Dynamic web project 默认是将类编译在build如果在eclipse中配置了tomcate(server项),用自带的发布功能,是能自动识别的.2.自已修改到 ...

随机推荐

  1. Spring原理探究篇

    spring ioc原理 首先了解一下ioc 的特征,控制反转,就是把之前手动去new对象的操作,现在来交给ioc来实现了,完成代码相对的接偶. 那么,它是怎么去创建bean对象的呐? 原理: 底层依 ...

  2. input输入框输入组合的限制

    1 输入大小写字母.数字.下划线: 2 <input type="text" οnkeyup="this.value=this.value.replace(/[^\ ...

  3. 推荐Visual Studio四款好用插件

    我要推荐的4个插件,合理使用可以提高工作效率,分别是: 1.Markdown Editor 可以在vs预览markdown文件的插件 2.Add New File 我们原本在vs中新建文件,需要添加新 ...

  4. ET–异步协程使用–TimerComponent篇

    之前可能也有群友写过一些关于ET框架中TimerComponent的使用教程,我这里写下关于TimerComponent的常规使用跟一些不常规使用的方法以及一些情况下需要使用到的不同的函数. 先来看看 ...

  5. #Powerbi 利用EOMONTH,计算月度时间进度

    在POWERBI中计算本月的时间进度 许多小伙伴在做看板时,往往会遇到需要时间进度的计算,来配合业绩达成的进度,进行比较分析.那么如何在BI做通过公式进行这个数据的求值呢? 首先,我们需要测算两个值, ...

  6. 2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。 你要用 所有的火柴棍 拼成一个正方形。 你 不能折断 任何一根火柴

    2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度. 你要用 所有的火柴棍 拼成一个正方形. 你 不能折断 任何一根火柴 ...

  7. 2021-02-06:假设字符串str长度为N,请问最长回文子串的长度是多少?

    福哥答案2021-02-06: 1.动态规划.无代码,见图.2.中心扩展法.无代码.3.Manacher算法.有代码,见图.1)理解回文半径数组.2)理解所有中心的回文最右边界R,和取得R时的中心点C ...

  8. 【GiraKoo】Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

    [解决]Could NOT find PkgConfig (missing PKG_CONFIG_EXECUTABLE) 环境 Ubuntu 22.04 现象 在编写CMakeLists.txt时,调 ...

  9. ET介绍—— 一切皆实体的设计

    一切皆实体 目前十分流行ECS设计,主要是守望先锋的成功,引爆了这种技术.守望先锋采用了状态帧这种网络技术,客户端会进行预测,预测不准需要进行回滚,由于组件式的设计,回滚可以只回滚某些组件即可.ECS ...

  10. * daemon not running; starting now at tcp:5037

    今日使用weeplus run android时 看错误提示 ,是5037端口的问题 * daemon not running; starting now at tcp:5037 于是找到查看端口的 ...