在Visual Studio中调试时,有时我添加了一个断点,但它是空心的,VS说“断点目前不会被击中。”源代码与原始版本不同。”显然,这使我无法进行调试。

这条消息到底是什么意思?什么原始版本?如果我只是打开了解决方案,而没有对代码做任何更改,又怎么会有“原始版本”呢?


当前回答

确保在csproj中将<Optimize>false</Optimize>设置为false

其他回答

如果您正在使用激活器,而设置断点的程序集尚未加载,则可以获得此消息。

一旦激活器加载程序集(假设程序集和调试符号是最新的),断点将被解析。查看调试菜单中的模块窗口是一个好地方。在那里您应该寻找您的文件所属的程序集。首先检查程序集是否加载。那么,从哪里装载的呢?然后,是符号文件加载。同样,符号文件从哪里加载?最后检查两者的版本。

有时您只需要将解决方案配置从“发布”更改为“调试”。

在我的案例中,是项目/属性/构建选项卡中的错误设置

我有一个主项目引用项目xxx.dll 引用dll中的断点未被命中。

对dll的引用被设置为库文件夹中的bin\debug\xxx.dll

因此,当我调试主项目时,它会到库的bin\debug文件夹中寻找xxx.dll。

但是,在库的属性中,由于一些黑暗的原因,输出路径被设置为bin\x86\debug而不是bin\debug

因此,库的每次构建都将新的dll放在bin\x86\debug文件夹中,而不是在bin\debug中

所以VS在调试的时候总是找到一个旧的库的dll,因此错误是正确的,有一个不同的源。

所以我修正了从库到bin\debug的输出路径,所以主项目的引用现在会找到正确的版本,现在我的断点再次被击中。

我花了好几个星期才弄明白

我刚刚重启电脑,它为我工作得很好。

尽管所有的答案,我的问题实际上不同于这里提到的!

确保您的属性->构建选项卡->输出路径指向与您所选择的构建配置的解决方案中所有其他项目相同的位置!

如果你的启动项目将它的可执行文件从你试图调试的dll发送到不同的文件夹,你可能会遇到问题,尽管你的构建和visual studio工作完美。