无法进入.NET框架源代码

hus*_*int 26 .net c# debugging reference-source

我正在使用Visual Studio 2013并拥有一个.NET 4.5.2项目.我根据以下页面设置了我的设置:

http://referencesource.microsoft.com/setup.html

通过此设置,我可以看到所有必需的符号都已下载并加载,但我无法进入如下代码:

var cookieContainer = new System.Net.CookieContainer();
Run Code Online (Sandbox Code Playgroud)

我收到源不可用消息.

我可以很好地进入下面的代码:

Console.WriteLine("test");
Run Code Online (Sandbox Code Playgroud)

您是否知道为什么我可以从mscorlib.dll进入代码但无法从System.dll进入代码?

Han*_*ant 23

并有一个.NET 4.5.2项目

版本号是您的问题.这是参考源的一个普遍问题,微软没有及时更新它来为新框架版本提供源代码.更安全和稳定的更新令人不安.在这方面工作的人非常清楚这个问题,他们在演示文稿中注意到这是一个问题,但它目前并且始终具有// todo项目的状态.

您可以直观地看到它,首先从符号缓存中删除System.pdb(MicrosoftPublicSymbols中的那个).然后开始调试您的测试程序,调试器将从服务器检索新的PDB.使用Debug> Windows> Modules,右键单击System.dll并选择"Symbol Load Information".在我的机器上看起来像:

C:\projects2\ConsoleApplication407\bin\Debug\System.pdb: Cannot find or open the PDB file.
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.pdb: Cannot find or open the PDB file.
C:\Windows\System.pdb: Cannot find or open the PDB file.
C:\Windows\symbols\dll\System.pdb: Cannot find or open the PDB file.
C:\Windows\dll\System.pdb: Cannot find or open the PDB file.
C:\temp\symbols\System.pdb\c464b02c2bf04080adcad166dc729c151\System.pdb: Cannot find or open the PDB file.
C:\temp\symbols\MicrosoftPublicSymbols\System.pdb\c464b02c2bf04080adcad166dc729c151\System.pdb: Cannot find or open the PDB file.
SYMSRV:  C:\temp\symbols\System.pdb\C464B02C2BF04080ADCAD166DC729C151\System.pdb not found
SYMSRV:  http://referencesource.microsoft.com/symbols/System.pdb/C464B02C2BF04080ADCAD166DC729C151/System.pdb not found
http://referencesource.microsoft.com/symbols: Symbols not found on symbol server.
SYMSRV:  System.pdb from http://msdl.microsoft.com/download/symbols: 96985 bytes 
http://msdl.microsoft.com/download/symbols: Symbols downloaded from symbol server.
C:\temp\symbols\System.pdb\C464B02C2BF04080ADCAD166DC729C151\System.pdb: Symbols loaded.
Run Code Online (Sandbox Code Playgroud)

您可以看到它在正常位置搜索PDB而未找到它.然后联系SYMSRV.它首先http://referencesource.microsoft.com应该如此,但服务器说"找不到".并且您将从常规msdl服务器获取副本,剥离的服务器没有必要的文件+行号调试信息.

没有干净的解决方法,您必须将您的机器再次降级到参考源版本.使用Windows 8.1我无法做的事情.不应该这样做,我使用的是VS2013.Redgate的Reflector是另一种选择.

我为此创建了一个UserVoice项目,它需要更多的投票.


更新:参考源现已更新至4.5.2(2015年3月)

  • 谢谢一堆.这也有助于:http://stackoverflow.com/q/8139269/39"用于单步执行源代码的PDB仅针对RTM和Service Pack发布.因此,当安全更新发布并且它修改了dll时试图调试,它将导致源步进不起作用(也就是说,你会得到"没有源可用"与灰色的"浏览找到源")." (2认同)

kjb*_*tel 15

JetBrains DotPeek(目前版本为1.2)有一个非常好的功能,它不仅可以生成pdbs,还可以通过内置的Symbol Server在本地提供这些pdb,以便在调试时为Visual Studio提供符号.显然,源代码是反编译代码而不是实际源代码,但在正常的MS符号服务器没有为您提供所需的pdbs时,它可能会非常有用.

有关符号服务器功能的信息可以在他们的网站找到.

  • 太荒谬了,Microsoft无法整理其符号服务器和所需的引用,因此调试到.NET Framework类是“正常工作”的功能。Visual Studio应该能够无任何调整地解析任何对源的框架引用。我也购买了DotPeek,并正在使用它来调试.NET框架类。(感谢JetBrains制造这样的产品!) (2认同)