解决Visual Studio 2019“正在下载用于nugetorg的intellisense索引”的完整尝试与解决方法

品味人生 • 发布于 2019-02-01 21:37:02

这个家伙很害羞,不想介绍自己!

近日在折腾.net core的时候无意中升级了visual studio 2019 更新到16.6.1之后后台任务中一直有一个 “正在下载用于nugetorg的intellisense索引”的任务在运行。起初以为只是因为网络慢的原因导致下载缓慢,后来写代码好几天之后一直在下载。爬了许多帖子,也到微软官方的反馈区寻找过解决方案,但是都没有有效的解决这个问题。

先说一下百度到的两种方法如下:

第一种 注册表禁用法

注册表禁用法是通过在注册表中对vs软件的注册表进行强行设置,关闭其 SymbolSearch 的动态搜索功能,达到眼不见为净的目的。方法如下:

运行 -> regedit 打开注册表编辑器。找到\HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\16.0_{版本字符串}\  路径(这里的版本字符串就是你使用对应版本的字符串号,每使用过一个版本的vs都会留下一个对应版本的注册表记录),如图:

image.png

找到你对应vs版本的目录后打开该目录(这里需要注意一下,并不是最新的版本目录就在最下面,因为这里的目录排序完全是按照字符串的形式进行排序的),在目录下一次创建项Roslyn\Features\SymbolSearch,如图:


image.png

并在SymbolSearch项中添加一个 DWORD(32-bit) 的键值 名称为 Enabled 值设置为0,其实意思就是把这项功能关闭。

这样设置后 visual studio 启动时就不会进行nugetorg源索引的一个搜索,不过我个人认为这样做不知道会不会带来什么额外的问题,所以不太推荐这种一刀切的解决方案。


第二种 删除nuget包中的源配置,并重新添加

在visual studio的 工具->选项->NuGet包管理器->程序包源 中 可以看到一个名称为nuget.org的源,对应的地址是https://api.nuget.org/v3/index.json 如图:

image.png

网上搜索的帖子说法是 将这个源删除,重启vs 再将这个源添加进去,再重启即可解决。

经过尝试,该方法并不能解决问题,而且也并不明白这样操作的解决原理,所以个人认为这个方法是行不通的。


通过对上述两种方案的思考,并得出解决办法

首先,方法1中的禁用方式从解决问题的角度来说是有效的,但是会导致无法更新源的索引,不可取。方法2 如果其他人使用该方法有效,那我个人认为可能是对目标源进行了一次重新连接的尝试,从而成功得到返回请求解决问题。

实际上出现这种问题的症结还是因为国内的网络原因导致,所以尝试打开https://api.nuget.org/v3/index.json 这个地址,发现访问后会自动跳转到https://nuget.cdn.azure.cn/v3/index.json  这个地址。说明nuget源实际上已经对不同地区的网络问题做出过相应的解决尝试,个人猜测这里可能是管理器请求之后无法很好的进行重定向导致更新失败。

所以自此解决思路就已经很明确了,我们只需要把原本的negut.org的源更换为新地址的源即可,如下图:

image.png

点击确定后,重启vs即可。重启vs后依然会进行索引操作,但是过一会就会完成索引,自此这个问题就完美的解决了。

最后提供一下字符串,供大家复制;名称:nuget.cdn.azure.cn 源:https://nuget.cdn.azure.cn/v3/index.json