如何在Visual Studio 2017中调试.NET 4.6框架源代码?

这是我尝试过的:

在Visual Studio 2017中创建了一个新的控制台应用程序(.NET Framework)。

添加了以下代码:

static void Main(string[] args) { new Dictionary().TryGetValue(3, out int x); //I want to step into TryGetValue() (this is just an example) } 

配置此处列出的设置: https : //blogs.msdn.microsoft.com/sburke/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code/

已确认的符号将加载到“模块”窗口中:

mscorlib.dll已加载符号。 4.6.1586.0构建者:NETFXREL2

尝试:“踏入(F11)”

尝试:“步入特定”| “System.Collections.Generic.Dictionary.TryGetValue”

两者都只是跨过了界限。

我尝试使用以下详细信息配置VS: http : //www.symbolsource.org/Public/Home/VisualStudio

同样的结果,调试器跨越了这一行。

我在这里看了答案: https : //stackoverflow.com/a/12432029/297451

但是这个版本似乎不是安全更新,搜索“site:support.microsoft.com/kb 4.6.1586.0”不会产生任何结果。

我究竟做错了什么?

这是答案,感谢Hans Passant。 请注意,此解决方案提出了其他问题。

  1. 确保https://referencesource.microsoft.com/包含您正在调试的确切版本。

    • 怎么样? 参考源指定“.NET Framework 4.6.2”,但模块版本类似于:“4.6.1586.0”
    • 您可能需要卸载安全更新,如下所述: 如何启用“启用.NET Framework源步进”?
  2. 按照此处的说明配置Visual Studio: https : //referencesource.microsoft.com/setup.html

    • 解开“启用我的代码”
    • 勾选“启用.NET Framework源步进”(这应该是唯一需要的步骤)
    • 勾选“启用源服务器支持”
    • 取消“要求源文件与原始版本完全匹配”
  3. 确认符号已加载到“模块”窗口中,并包含源索引。

    • 如何判断是否包含源索引? 模块窗口未指定PDB是否已剥离源信息。

通过提供有用的错误消息而不是静默失败,Microsoft可以使此过程更加健壮。

使用Jetbrains dotPeek中的符号服务器function。 在努力使标准function发挥作用之后,对我来说就像是一种魅力。