如何拦截“无法加载文件或程序集”?

时间:2014-03-04 13:00:31

标签: c# exception-handling clr

在测试基于命令行的程序时,我从执行目录中删除了一个DLL。这当然导致在程序启动时触发Could not load file or assembly异常,并将原始异常详细信息转储到命令行:

  

未处理的异常:System.IO.FileNotFoundException:无法加载   文件或程序集'MyDLL,Version = 1.2.3.14056,Culture   = neutral,PublicKeyToken = 0a0932194e205074'或其依赖项之一。该系统找不到指定的文件。在   MyApp.Program.Program.Main(String [] args)

我不希望用户看到这些原始详细信息,但我无法看到如何/在何处捕获此异常以清理显示的消息。

那么捕捉这样的东西的最佳/可接受方式是什么?

1 个答案:

答案 0 :(得分:2)

您可以注册到Unhandled Exception处理程序并对其进行处理:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler((x, y) =>
{
    var exception = y.ExceptionObject as Exception;

    if (exception is System.IO.FileNotFoundException)
        Console.WriteLine("Please make sure the DLL is in the same folder.");
});

确保在代码中对MyDLL的任何引用之前执行此事件注册。 Program.cs中的静态构造函数可能是一个不错的选择。