首页 > 其他分享 >如何修改NuGet默认全局包文件夹的位置?

如何修改NuGet默认全局包文件夹的位置?

时间:2023-08-14 11:14:27浏览次数:32  
标签:nuget 默认 NuGet 文件夹 proxy 设置 config 环境变量

由于一些历史原因,重装系统成为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. 完成以上设置之后,新的设置会马上生效(如果不放心可以重启一下电脑),接下来可以把原先目录里面的包全部剪切到新目录里面。

点关注,不迷路。

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

 

 

出处:https://www.cnblogs.com/zhaorong/p/how-to-change-nuget-global-folder.html

标签:nuget,默认,NuGet,文件夹,proxy,设置,config,环境变量
From: https://www.cnblogs.com/mq0036/p/17628093.html

相关文章

  • 面试官:为什么MySQL不建议使用NULL作为列默认值?(转)
    原文:https://mp.weixin.qq.com/s/4aWKVvGTjG4Hiv2ULxQiAg来源:微信公众号“Java充电社”今天来分享一道美团高频面试题,5分钟搞懂“为什么MySQL不建议使用NULL作为列默认值?”。对于这个问题,通常能听到的答案是 使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你......
  • 改大蟒蛇Anaconda中Jupyter Notebook默认工作路径
    先用大蟒蛇的终端生成配置文件输入jupyternotebook--generate-config然后会告诉你生成文件的地址。文本模式打开该文件搜索“Thedirectorytousefornotebooks”,把下面的取消注释,写好文件目录重启即可......
  • Windows11 操作系统 SysWOW64 文件夹的作用
    Windows11操作系统中的SysWOW64文件夹是一个重要的系统目录,它在某些方面扮演着特殊的角色。在这篇文章中,我将详细介绍SysWOW64文件夹的作用,并举例说明它在操作系统中的具体应用。首先,让我们了解一下该文件夹的背景和目的。SysWOW64文件夹是Windows64位操作系统中的一个......
  • mysql8默认caching_sha2_password身份验证
    发生这个问题的原因是在mysql8.0以后,caching_sha2_password是默认的身份验证插件,而不是以往的mysql_native_password。在MySQLCommandLine工具下修改mysql的默认身份验证插件即可。Theserverrequestedauthenticationmethodunknowntotheclient[caching_sha2_passw......
  • SonarQube-7.7到9.9社区版本默认数据库H2连接方法
    使用连接字符串方法:jdbc:h2:tcp://localhost:9092/sonar默认使用Embedded类型的数据库和驱动,用户名和密码为空。如使用DBVisualizer23.*版本连接:切换到DatabaseURL模式,输入上述连接字符串,点击Connect即可。  ......
  • 派生类的默认成员
    派生类的默认成员在前面类和对象那一节我们学习了6个默认成员函数:我们知道即使我们不写,编译器也会自动生成。我们也来学习一下派生类的默认成员函数。在下面的代码中Person是基类,Student是Person的派生类:classPerson{public://构造函数 Person(constchar*name="......
  • DOS复制文件夹命令
    DOS复制文件夹包括子目录,可含文件也可仅仅是目录,包含空文件夹目录等等。命令:xcopy复制地址目标地址/参数列:XCOPYC:\AAAD:\/S扩充举例:仅仅是复制目录,包含空文件夹,不含有文件命令如:XCOPYC:\AAAD:\/T/E扩展资料:输入XCOPY/?可以查看命令XCOPY的所有参数。/A   ......
  • java中int默认是0,Integer默认是null
    在Java中,int是一种原始数据类型,它默认的初始值是0。原始数据类型在声明时会自动初始化为其默认值。而Integer是Java中的一个包装类,它用于将int封装为对象。Integer对象的默认值是null,即未经初始化时,Integer对象的值为null。需要注意的是,当我们使用Integer对象时,如果没有明确地给......
  • 关于多行文本框默认选中内容样式
    有的项目页面是禁止选中文本的,但是输入框是个特例,需要单独设置样式,即选中内容时的背景颜色;textarea{outline:none;background:transparent;outline:medium;}*:focus{outline:none;background-c......
  • Qt 安装mqtt环境(这里默认以及有了Qt)
    首先QT的版本和mqtt包的版本要一致(我这里QT和mqtt的版本都是5.14.2)QT安装包(5.14.2)下载地址:Indexof/archive/qt/5.14mqtt包的一个连接(可以选择相应的版本)GitHub-qt/qtmqttat5.14.2将mqtt包解压后,mqtt.pro使用QTCREATOR打开,用release编译。编译中可能会出错:“QtMqt......