我检查了Visual Studio中的“启用.NET Framework源步进”调试选项,创建了一个符号缓存目录 . 现在,当我调试项目时,Visual Studio会创建一个对话框,说“下载公共符号”并列出引用的模块 . 这适用于每个引用的模块 .

结果是我有时候等待几分钟才开始调试 .

可以点击“取消”直接进入调试 . 然后下一个我调试它从它停止的地方继续 .

查看我的HTTP流量,似乎每个模块都会在referencesource.microsoft.com上查找符号 . 由该服务器托管的符号(即,像system.dll这样的Microsoft模块)将下载到符号缓存中 . 其他符号在符号缓存的“FailedLoads”文件夹中获取文件,文本“PDB Not Found” . 即使已选中“将源服务器诊断信息消息打印到输出窗口”,也不会在“输出”窗口中找到有关失败的信息 .

一旦模块在缓存中有符号或在FailedLoads文件夹中有文件,它就不会再次出现对话框 . 因此,让过程完成一次可以解决缓慢的调试启动时间,直到添加新的引用 .

我尝试了几件事来看看会发生什么 . 没有什么能指出真正的解决方案 .

  • 取消选中"Enable .NET Framework source stepping"可解决此问题

  • 设置默认情况下自动加载符号以包含或排除不会更改行为

  • 在自动加载符号中包含或排除特定模块不会更改该模块的行为

  • 检查/取消选中"Enable source server support"或其任何子选项不会更改行为

  • 检查/取消选中"Microsoft Symbol Servers"符号位置不会更改行为

  • 添加新符号位置不会更改行为 . 这些新符号服务器上可用的模块仍然在FailedLoads文件夹中,并且在"Downloading public symbols"对话框中没有向它们发出HTTP请求 .

  • 通过替代方法(例如,在调试时从不同的符号服务器加载)将符号放入符号缓存中,以避免该模块的"Downloading public symbols"对话框 .

我在VS2013 Update 1,VS2015 Update 3和VS2017 RC上重现了这个问题 . 有趣的是,我相信我已经使用VS2013多年没有这个问题了 . 我认为它是在几个月前开始的,当时我转向VS2015 .

有谁知道这是一个已知的错误,还是有一种方法可以在禁用此行为时启用.NET Framework源步进?