我必须遗漏一些东西......如何抛出异常,但异常后的代码仍会在调试器中被命中?
private UpdaterManifest GetUpdaterManifest()
{
string filePathAndName = Path.Combine(this._sourceBinaryPath, this._appName + ".UpdaterManifest");
if (!File.Exists(filePathAndName))
{
// This line of code gets executed:
throw new FileNotFoundException("The updater manifest file was not found. This file is necessary for the program to run.", filePathAndName);
}
UpdaterManifest updaterManifest;
using (FileStream fileStream = new FileStream(filePathAndName, FileMode.Open))
{
// ... so how is it that the debugger stops here and the call stack shows
// this line of code as the current line? How can we throw an exception
// above and still get here?
XmlSerializer xmlSerializer = new XmlSerializer(typeof(UpdaterManifest));
updaterManifest = xmlSerializer.Deserialize(fileStream) as UpdaterManifest;
}
return updaterManifest;
}
答案 0 :(得分:5)
某些情况通常会发生这种情况:
当关闭“要求源文件与原始版本完全匹配”选项时。在这种情况下,当文件不同步时,您不会收到警告。
当IDE要求“存在构建错误时。是否要继续并运行上次成功构建?”,在这种情况下IDE可能是错误的正确行,因为它运行的是早期版本。
当您调试代码的发布版本时,某些部分会被优化掉。这导致突出显示的行成为源中的下一个可用行,它反映了优化代码中的实际语句(在使用优化的外部程序集进行调试时,您经常会看到这一点。)
查看截图: