【发布时间】:2015-02-16 14:57:09
【问题描述】:
我想我遇到了与this Thread 中已经提出的类似问题。当我在当前项目中运行以下代码时,我收到了一个System.IO.FileNotFoundException,尽管我实际上已经捕捉到了它。
XmlDocument xmlDocument = new XmlDocument();
public LoadFile(string xmlFile)
{
try {xmlDocument.Load(xmlFile);}
catch {xmlDocument.LoadXml("<settings></settings>");} // File does not exist
}
但是,当我使用这段代码创建一个新项目时,异常被正确捕获。
我看不出我当前的项目和新项目(相同的 .NET 版本,都是 32 位)之间有任何区别。
在另一个帖子中,Jon Skeet 对这个问题给出了以下答案:
我的猜测是,当它最初被抛出时,它会在调试器中闯入 FileNotFoundException,但它会被 catch 块正确捕获。您可以更改异常的调试器设置 - 当然,或者只是在调试器之外运行它。
我不明白。我不想禁用FileNotFoundException。谁能进一步解释一下,好吗?
编辑:我知道我可以改用File.Exists(...);但是,我仍然想知道为什么这不起作用。
【问题讨论】:
-
Jon 不是在谈论“禁用异常”。有两种方法可以让调试器处理异常:1.) 在抛出异常时立即中断,或 2.) 在 catch 块未处理异常时中断。如果您启用了 1.),则调试器将中断,尽管 catch 块稍后会处理异常。
-
好的。所以,我刚刚启用了
Tools -> Options -> Debugger -> General -> Enable Just My Code。但是,我仍然有同样的问题。 -
再次,当在新项目中使用这段代码时,异常被正确捕获。我在调试模式下运行这两个项目。这对我来说仍然没有任何意义。
-
错误选项:调试器 -> 异常... -> 全部重置
标签: c# wpf exception-handling .net-4.5