2008-09-20 28 views
1

以前我從來沒有真正做過的事情,但確保我的應用程序使用的任何外部程序集/ dll可用,並且可能是正確版本的最佳方法是什麼?檢查vb.net中的外部依賴關係

我寫了一個依賴於System.Data.SQLite.dll的應用程序,我去測試它在那個DLL丟失的機器上,我的應用程序只是拋出一個運行時異常,因爲DLL丟失。我如何捕獲這個錯誤?

回答

1

你想要做的就是使用反射來檢查程序集是否可以加載到內存中。將它封裝在try..catch塊中,並處理來自它的任何特定異常。

Try 
    Assembly.Load("System.Data.SQLite, Version=1.0.22.0, Culture=neutral, PublicKeyToken=DB937BC2D44FF139"); 
Catch ex As FileNotFoundException 
    //do something here 
End Try 
0

您應該將錯誤捕獲到主循環之外。
或者如果您想運送/定位您自己的組件,您可以嘗試覆蓋組件探測:Link

0

您可以使用安裝項目爲您的應用程序構建安裝程序。這將分析所有的靜態依賴關係,並生成一個安裝程序,以確保目標機器獲取所需的所有內容。

1

(我已經設定在這一個社區擁有的標誌,因爲這是大多都是源自我內心的本能,我可能已經錯過了在某處有一個關鍵步驟)

簡答:使用安裝程序在應用程序旁邊部署依賴項通常是一個好主意。沒有他們,就像你注意到的那樣,你的應用程序工作的可能性很小。

龍答:好了,說你有,你要提供,如果別的東西安裝在目標機器上額外功能。下面是一些一般原則去做:

  1. 對於具有字段,屬性,事件,參數,或返回值,它引用可能未安裝集中定義的類型的任何類型:必須用一個接口包裹,並替換所有其他字段,參數,返回值或局部變量聲明以使用該接口。
  2. 任何時候你去構建以前包裝類之一,則必須使用System.Activator.CreateInstance方法,並將其包裝在一個try/catch在7個不同的異常類型過濾:

    • FileNotFoundException
    • FileLoadException
    • BadImageFormatException
    • TypeLoadException
    • MissingMethodException
    • MissingMemberException
    • MissingFieldException

    如果其中之一被捕獲,您必須提供一個替代的實施先前創建的界面,或使之檢查空它引用該對象的任何時間編寫代碼。

+0

感謝您的解釋,我使用Josh提供的示例代碼,但此信息也非常有用 – beakersoft 2008-09-20 15:27:47