缺少对类库的引用时处理“FileLoadException”

时间:2013-03-04 21:18:33

标签: vb.net visual-studio-2008

我已经编写了一个DLL /类库,我正在我的一些应用程序中使用它。我在项目引用中引用了库,并在表单的“公共类”中声明了库的瞬间,如下所示(即不在Sub或Function中):

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,因为它在方法之外,但我甚至不确定是否是导致错误的那一行,或者只是存在一个不存在的项目引用的事实。 / p>

2 个答案:

答案 0 :(得分:1)

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

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

EX:

Class MyClass

    Dim myLibrary As MyHelperLibrary.MyHelperLibraryClass

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

End Class

OR:

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

答案 1 :(得分:1)

  

我甚至不确定是否是导致错误的那一行

它是,但不是你想的。异常是由抖动生成的,之前实际使用该类型的任何代码甚至开始运行。作为即时,通常会以任何方式调用类。为了生成代码,首先需要程序集的抖动。异常将在拨打电话的代码中引发,而不是在您的班级附近。

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

如果这启动声音就像一个真正的坏主意那么,是的,它是。