一个C#桌面应用程序(在Visual Studio Express版上)工作了,但5秒钟后就不工作了。

我尝试了以下方法:

确保在所有程序集上设置了调试配置、调试标志和完整的调试信息。从我的整个计算机中删除所有bin和obj文件夹以及与项目相关的所有DLL文件。从头开始重新创建导致问题的项目。重新启动。

我在解决方案中有两个Windows窗体项目。其中一个加载调试信息,另一个不加载。它们都引用了我试图在项目文件中以完全相同的方式获取调试信息的程序集。有什么想法吗?


我想在这里补充一点,当我回来回顾这个问题时,主要是为了我自己,即在加载程序集之前不会加载符号,并且在需要时才会加载程序集。如果断点位于仅在主程序集中的一个函数中使用的库中,则在调用该函数之前,不会加载符号(并且它将显示断点未命中)。


当前回答

如果您添加了一个生成后过程以将资源元数据添加到DLL(公司名称、版本号等),如“rc.exe my_DLL.rc”中所示,这可能会导致DLL和.pdb文件之间的不匹配。如果签名不匹配,它将不会加载文件和调试所需的所有符号。将其从调试生成中删除。

其他回答

有时,即使它给你这个错误,断点仍然会被击中,所以忽略这个错误。

这在MVC web应用程序(即.cshtml)的视图中经常发生。

我认为如果这个错误是源代码,调试符号在构建发布后很难出现在解决方案中。

我尝试了所有其他答案——一般来说,重新生成.pdb符号或检查它们的位置、清理和重建项目、确保活动配置不是Release等。

最终对我有用的是在解决方案浏览器>调试>启动新实例中右键单击项目。

从Visual Studio 2017 15.3.1到15.3.5,出现了解决此问题的新方法。如果您使用的是EditorConfig,charset=utf8选项会导致这些症状。VS团队已经复制了这一点,并表示他们正在对此进行研究。

因此,一个修复方法是注释掉.editorconfig文件中的charset=utf8行。

截至2017年10月9日,状态为“已修复-待发布”。

(感谢约翰·哈顿,“断点当前不会被命中。源代码与原始版本不同。”这意味着什么?

在尝试了一系列这些之后,最终对我有用的是:

在“调试”>“选项”>“常规”中,取消选中“启用编辑并继续”。

通常,我们的应用程序在工作时会引用特定公共/app目录中的.dlls,例如C:\OurCompanyApps\xxxxxx.dll。这是在一个包含大量WinForm和.dll项目的解决方案中发生的。.dll项目会编译到C:\OurCompany apps\,WinForm项目会引用该位置中编译的.dll文件。

问题:我发现有问题的应用程序引用的是源代码管理bin\Debug位置中的.dll项目,而不是C:\OurCompanyApps中编译的.dll文件。

解决方案:我删除了引用,并从C:\OurCompanyApps\位置重新添加了它。然后我可以逐步通过我在.dll代码中添加的断点。