System.IO.FileNotFoundException 是什么意思
What's the meaning of a System.IO.FileNotFoundException
我在 C# 程序中有这段代码:
ListOfCabins();
ListOfWoodTypes();
第一个函数如下所示:
private void ListOfCabins()
{
Logger.Info($"Start function ListOfCabins()");
try
{
}
catch (Exception ex)
{
...
}
Logger.Info($"End of function ListOfCabins()");
}
其他函数如下:
private void ListOfWoodTypes()
{
Logger.Info($"Start function ListOfWoodTypes()");
...
Logger
是一个典型的NLog
对象:
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
在日志中,我看到:
End of function ListOfCabins()
我没看到:
Start function ListOfWoodTypes()
我的应用程序崩溃,在事件日志中我看到:
Application: ...
Framework Version: v4.0.30319
Description: The process wa terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
at ...ListOfWoodTypes()
at ...
我在这里有不同的问题:
- A
System.IO.FileNotFoundException
,这是否意味着我的应用程序正常,尝试打开一些不存在的外部文件,或者它是否类似于 Java 进程,缺少 *.class
文件?
- 为什么
System.IO.FileNotFoundException
没有被我的 try ... catch (Exception ex)
子句捕获?
- 日志呢?我希望至少看到
ListOfWoodTypes()
函数的第一行。这是否意味着 NLog
技术中有一些缓冲,导致 NLog
日志记录在崩溃时有一些延迟?
Edit1,无法调试
我在自己的 PC 上开发这个程序,我在这里构建它,但我随后将可执行文件复制到我客户的 PC 上,因此无法进行调试。
重新打开请求
我的问题与“.NET Global exception handler in console application”无关,它是针对这个异常的。此外,Windows 事件日志中并未完全处理此特定异常,正如我自己的回答中所见。
让我开始吧 - 这并不像听起来那么容易。正如他们所说,细节决定成败...
System.IO.FileNotFoundException
这通常意味着有人扔了它。时期。它是为了找不到文件而抛出的,但我看到系统异常被愚蠢的程序员滥用,或者“找不到文件”被解释得相当复杂(网络流可以使用文件 api 打开)在次。因此,虽然它表示 - 你知道 - 找不到文件,但不能 100% 确定这是触发文件的原因。
Why is a System.IO.FileNotFoundException not catched by my try ... catch
(Exception ex) clause?
你告诉我们。它应该是 - 如果它被扔在里面。
你自己的代码前后都有logger信息。并且日志记录可能会进入 - 猜猜是什么 - 一个文件。假设第一行可能抛出错误并不完全是超现实的。
我们不知道 - 你应该知道。在调试器中,抛出此异常时中断。获取它被抛出的确切位置。查看调用堆栈。查看属性。异常通常包含额外的数据——消息,可能还有属性。只是告诉我们细节就像“梅赛德斯撞车了,出了什么问题”。调试细节可能会回答您的所有问题。
What about the logs? I'm expecting to see at least the first line of the
ListOfWoodTypes() function.
是的,除非该行抛出异常。
如果没有日志文件,我会强烈建议 - 你知道 - 日志记录是问题所在。
Does this mean that there is some buffering in NLog technology, causing NLog
logging to have some delay on a crash?
好吧,该技术是“使用标准 .NET 缓存”...不使用它是完全愚蠢的。看,问题是如果你不缓存,你需要大量的 disci IO,这可能会使日志记录成为主要的性能消耗。你不能有这个。
但是:缓存与否,文件在吗?如果不是-那就是你的暗示。文件生成不被缓存(写入是,但文件必须存在才能打开流)。文件不存在...
System.IO.FileNotFoundException
这意味着文件有问题。所以,你认为你的程序想要打开一个输入文件,或者一个输出文件,...,或者你的日志文件,这也可能是一个文件,导致了那个异常。
但还有另一种文件:DLLs!!!
事情是这样的:我正在使用 NuGet 包。由于我在使用 NuGet Restore
时遇到问题,我决定直接参考 DLL
文件,但由于我需要进行一些升级,所以升级也必须在目标环境中完成,我完全忘了。
当应用程序崩溃时,是否调试应用程序是一个问题。按下那个按钮,我终于看到了丢失的文件。
只是一个很小的问题:显然,丢失的文件是已知的。 是否可以在事件日志中包含该文件的名称?我想这对很多人来说可能非常有用!
我在 C# 程序中有这段代码:
ListOfCabins();
ListOfWoodTypes();
第一个函数如下所示:
private void ListOfCabins()
{
Logger.Info($"Start function ListOfCabins()");
try
{
}
catch (Exception ex)
{
...
}
Logger.Info($"End of function ListOfCabins()");
}
其他函数如下:
private void ListOfWoodTypes()
{
Logger.Info($"Start function ListOfWoodTypes()");
...
Logger
是一个典型的NLog
对象:
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
在日志中,我看到:
End of function ListOfCabins()
我没看到:
Start function ListOfWoodTypes()
我的应用程序崩溃,在事件日志中我看到:
Application: ...
Framework Version: v4.0.30319
Description: The process wa terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
at ...ListOfWoodTypes()
at ...
我在这里有不同的问题:
- A
System.IO.FileNotFoundException
,这是否意味着我的应用程序正常,尝试打开一些不存在的外部文件,或者它是否类似于 Java 进程,缺少*.class
文件? - 为什么
System.IO.FileNotFoundException
没有被我的try ... catch (Exception ex)
子句捕获? - 日志呢?我希望至少看到
ListOfWoodTypes()
函数的第一行。这是否意味着NLog
技术中有一些缓冲,导致NLog
日志记录在崩溃时有一些延迟?
Edit1,无法调试
我在自己的 PC 上开发这个程序,我在这里构建它,但我随后将可执行文件复制到我客户的 PC 上,因此无法进行调试。
重新打开请求
我的问题与“.NET Global exception handler in console application”无关,它是针对这个异常的。此外,Windows 事件日志中并未完全处理此特定异常,正如我自己的回答中所见。
让我开始吧 - 这并不像听起来那么容易。正如他们所说,细节决定成败...
System.IO.FileNotFoundException
这通常意味着有人扔了它。时期。它是为了找不到文件而抛出的,但我看到系统异常被愚蠢的程序员滥用,或者“找不到文件”被解释得相当复杂(网络流可以使用文件 api 打开)在次。因此,虽然它表示 - 你知道 - 找不到文件,但不能 100% 确定这是触发文件的原因。
Why is a System.IO.FileNotFoundException not catched by my try ... catch (Exception ex) clause?
你告诉我们。它应该是 - 如果它被扔在里面。
你自己的代码前后都有logger信息。并且日志记录可能会进入 - 猜猜是什么 - 一个文件。假设第一行可能抛出错误并不完全是超现实的。
我们不知道 - 你应该知道。在调试器中,抛出此异常时中断。获取它被抛出的确切位置。查看调用堆栈。查看属性。异常通常包含额外的数据——消息,可能还有属性。只是告诉我们细节就像“梅赛德斯撞车了,出了什么问题”。调试细节可能会回答您的所有问题。
What about the logs? I'm expecting to see at least the first line of the ListOfWoodTypes() function.
是的,除非该行抛出异常。 如果没有日志文件,我会强烈建议 - 你知道 - 日志记录是问题所在。
Does this mean that there is some buffering in NLog technology, causing NLog logging to have some delay on a crash?
好吧,该技术是“使用标准 .NET 缓存”...不使用它是完全愚蠢的。看,问题是如果你不缓存,你需要大量的 disci IO,这可能会使日志记录成为主要的性能消耗。你不能有这个。
但是:缓存与否,文件在吗?如果不是-那就是你的暗示。文件生成不被缓存(写入是,但文件必须存在才能打开流)。文件不存在...
System.IO.FileNotFoundException
这意味着文件有问题。所以,你认为你的程序想要打开一个输入文件,或者一个输出文件,...,或者你的日志文件,这也可能是一个文件,导致了那个异常。
但还有另一种文件:DLLs!!!
事情是这样的:我正在使用 NuGet 包。由于我在使用 NuGet Restore
时遇到问题,我决定直接参考 DLL
文件,但由于我需要进行一些升级,所以升级也必须在目标环境中完成,我完全忘了。
当应用程序崩溃时,是否调试应用程序是一个问题。按下那个按钮,我终于看到了丢失的文件。
只是一个很小的问题:显然,丢失的文件是已知的。 是否可以在事件日志中包含该文件的名称?我想这对很多人来说可能非常有用!