【问题标题】:Handle "FileLoadException" when reference to class library is missing缺少对类库的引用时处理“FileLoadException”
【发布时间】:2013-03-04 21:18:32
【问题描述】:

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

Dim myLibrary As New MyHelperLibrary.MyHelperLibraryClass

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

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

【问题讨论】:

    标签: vb.net visual-studio-2008


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-07-08
        • 1970-01-01
        • 1970-01-01
        • 2012-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        相关资源
        最近更新 更多