2016-11-14 73 views
0

我有两个解决方案A和B.在解决方案A中,我有一个项目A1(它输出到一个DLL)。 A1最初只在解决方案A中使用,但由于某些无法预料的情况,解决方案B中的一个项目最终需要它。为什么我在DLL代码中得到断点

我将项目A1的DLL文件从解决方案A复制到解决方案B,并将其添加为参考。我是用手工方式做的;每当A1发生变化时,我都必须手动复制并替换DLL。

一切都很好,直到有一天,我意识到我在调试期间得到了断点。令我惊讶的是,断点在A1的课堂上。我能够看到我在解决方案A上编写的完整代码,包括评论。当我从那里删除断点时,当我下次调试时它会回来。但是,第二天似乎消失了。

现在我的问题是:为什么我能够看到完整的代码,当我没有将A1的源复制到解决方案B?我的理解是DLL需要一个反编译器才能返回到它的代码状态。即使使用反编译器,它也只能给我类似的东西,但不是确切的。最令人惊讶的是,我甚至可以看到我写的所有评论。

我正在使用VS2012 Pro,使用.NET 4.5。

+0

要了解这一点,我建议您阅读... http://www.codeproject.com/Articles/37456/如何 - 检查 - 内容 - 程序 - 数据库 - P – Mick

回答

1

在调试模式下构建时,完整源代码存储在程序集的.pdb文件中。此外,如果您处于发布模式,它仍然包含源代码的路径,如果dll构建在同一台计算机上,它将导航到该路径并在硬盘上显示源代码。

在发生这种情况的日子里,您可能同时复制了.dll和.pdb,但是随后又得到了一个新版本的.dll,并且您删除了pdb,或者版本不再匹配,因此停止使用它。

+0

哇,这让我大开眼界。不知道有这样的特点。谢谢。 – Jai

相关问题