当dll丢失时,防止应用程序崩溃而不提供信息

时间:2012-11-21 13:15:30

标签: .net windows vb.net assembly-resolution

如果缺少我的VB.NET程序所需的某些dll,当我运行它时,它会崩溃并显示典型的Windows错误消息,并且不会提供有关错误的任何信息。

所以,我想在做任何事情之前验证是否满足所有依赖关系。但这并不简单,因为我有非托管和运行时依赖。那么,在深入研究之前,是否有一些CLR设置,或者这个问题的一些更简单的解决方案?

1 个答案:

答案 0 :(得分:0)

这很简单(避免使用Windows的样板消息)。您只需要让您的应用程序处理UnhandledException事件。

对于像我这样的VB.NET应用程序窗口表单,这意味着转到项目属性Application选项卡并单击View Application events按钮。

它打开了(默认隐藏)ApplicationEvents.vb文件。我添加了一些代码:

Namespace My

    ' The following events are available for MyApplication:
    ' 
    ' Startup: Raised when the application starts, before the startup form is created.
    ' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
    ' UnhandledException: Raised if the application encounters an unhandled exception.
    ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
    ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
    Partial Friend Class MyApplication

        Private Sub MyApplication_UnhandledException(ByVal sender As Object, _
                                                     ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs _
                                                     ) Handles Me.UnhandledException
            MessageBox.Show("Application crashed due to the following unhandled exception. " + e.Exception.ToString())
        End Sub

    End Class    

End Namespace

现在,如果我错过了一些dll,我会在异常消息中得到它的名称,如果它被管理或混合。如果缺少的dll是不受管理的,我只得到需要它的混合程序集的名称。但那对我没关系;在Depends.exe上抛出混合程序集会快速显示违规的非托管程序集。