我有以下代码:
var test = _myDictionary.ContainsKey(myKey);
if (!test)
{
Logger.Error("My log message");
throw new ApplicationException("My exception message");
}
字典包含密钥。调试时,test
的值为true
会发生什么,代码是直接跳转到throw
语句,跳过对Logger
的调用,而它实际上也不应该这样做 - 它应该跳过整个块并且继续执行。
我已经完全从存储库中替换了源代码,我已经多次清理和重建,但无济于事。
但是,当我将代码更改为
时if (test)
{
// my code
}
else
{
Logger.Error("My log message");
throw new ApplicationException("My exception message");
}
一切都按预期工作。
任何想法可能会在这里发生什么?它现在的工作原理,但我不会轻易休息,除非我知道这可能是什么原因。
更新:我删除了输出文件夹中的.suo文件和一些二进制文件,即使我清理了解决方案,也没有删除。在此之后,它似乎工作正常
答案 0 :(得分:6)
当程序集及其PDB不同步时,有时会发生这种情况。当您进行调试时,调试器实际上从PDB文件中读取相关信息,而不是直接从源文件中读取。
您应该只是尝试重建项目(或手动清理然后构建),然后再试一次。
编辑我误解了你的问题,你说你已经尝试过重建了。在这种情况下,在调试期间,转到调试→Windows→模块窗口,并确保加载的符号文件实际上是正确的(例如从同一bin\Debug
位置加载):