2013-03-04 21 views
0

我已經寫了一個DLL /類庫,我在我的一些應用程序中使用它。我必須在項目引用庫的引用,我宣佈庫的形式的「公共類」瞬間如下(即不Sub或函數內部):當引用類庫時,處理「FileLoadException」

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,因爲它不在方法之外,但我甚至不確定它是否是導致錯誤的那一行,或者只是存在一個不存在的項目引用。

回答

1

通常,直接位於全局範圍內的第三方庫的實例對象不是一種好的做法,因爲它可能導致出現像您提到的那種情況。

您應該在將使用它們的類的構造函數或加載方法上移動變量的實例化。

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

我甚至不知道,如果是該行導致錯誤

它,但不是你想的。抖動產生異常,之前實際使用該類型的任何代碼甚至開始運行。準時,通常會以任何方式打電話進入班級。爲了生成代碼,首先需要程序集的抖動。在撥打電話的代碼中會出現異常,而不是您的班級附近的任何地方。

從那裏變得更糟。當您運行發佈版本時,抖動可能會將您的類中的方法內聯到調用方法的代碼中。現在在調用調用你的類的方法的方法中引發了異常。如果您的程序集中有不平凡數量的公共類,並且數量不重的公共成員,那麼可能會引發異常的位數可能非常大。數百是可能的。

如果這開始的聲音像一個真正的壞主意那麼,是的,它是。