0

我编写了一个 DLL/类库,我在我的一些应用程序中使用它。我在项目引用中有对库的引用,我在如下形式的“公共类”中声明了库的一个瞬间(即不在子或函数内):

Dim myLibrary As New MyHelperLibrary.MyHelperLibraryClass

我喜欢尝试处理任何错误,而不是让用户看到可怕的 Unhandled Exception 窗口,但是如果出于某种原因,我的库丢失或已被删除,我似乎无法处理它生成的异常:

System.IO.FileNotFoundException: Could not load file or assembly 'MyHelperLibrary, Version=0.9.0.0, Culture=neutral, PublicKeyToken=45f96d659b47asd9' or one of its dependencies. The system cannot find the file specified.

有没有办法处理上述情况?显然,我不能在 Dim 周围放置 Try/Catch,因为它在方法之外,但我什至不确定是否是导致错误的那条线,或者只是存在不存在的项目引用这一事实。

4

2 回答 2

1

通常,直接在全局范围内的第三方库的实例对象不是一个好习惯,因为它可能导致您提到的那种情况。

您应该在将使用它们的类的构造函数或加载方法上移动变量的实例化。

前任:

Class MyClass

    Dim myLibrary As MyHelperLibrary.MyHelperLibraryClass

    Private Sub New()
        myLibrary = New MyHelperLibrary.MyHelperLibraryClass
    End Sub

End Class

或者:

Class MyClass

    Dim myLibrary As MyHelperLibrary.MyHelperLibraryClass

    Public Sub Main()
        myLibrary = New MyHelperLibrary.MyHelperLibraryClass
    End Sub

End Class

通过这种方式,您可以使用 try/catch 块包装实例化。

另一种方法是处理 Application.UnhandledException

Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
    MsgBox(e.Exception.Message ) 
End Sub
于 2013-03-04T22:34:29.923 回答
1

我什至不确定是否是导致错误的那条线

它是,但不是你想的。异常是由抖动生成的,任何实际使用该类型的代码甚至开始运行之前。作为准时制,这通常是在调用类的任何方法中。为了生成代码,首先需要组装的是抖动。异常将在进行调用的代码中引发,而不是在您的班级附近的任何地方。

从那里开始变得更糟。当您运行发布版本时,抖动可能会将您的类中的方法内联到调用该方法的代码中。现在,在调用您的类的方法的方法中引发了异常。如果您的程序集具有非平凡数量的公共类和非平凡数量的公共成员,则可能引发异常的可能位置数量可能非常大。数百个是可能的。

如果这听起来像是一个非常糟糕的主意,那么,是的,它是。

于 2013-03-05T01:45:24.533 回答