以前我從來沒有真正做過的事情,但確保我的應用程序使用的任何外部程序集/ dll可用,並且可能是正確版本的最佳方法是什麼?檢查vb.net中的外部依賴關係
我寫了一個依賴於System.Data.SQLite.dll的應用程序,我去測試它在那個DLL丟失的機器上,我的應用程序只是拋出一個運行時異常,因爲DLL丟失。我如何捕獲這個錯誤?
以前我從來沒有真正做過的事情,但確保我的應用程序使用的任何外部程序集/ dll可用,並且可能是正確版本的最佳方法是什麼?檢查vb.net中的外部依賴關係
我寫了一個依賴於System.Data.SQLite.dll的應用程序,我去測試它在那個DLL丟失的機器上,我的應用程序只是拋出一個運行時異常,因爲DLL丟失。我如何捕獲這個錯誤?
你想要做的就是使用反射來檢查程序集是否可以加載到內存中。將它封裝在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
您應該將錯誤捕獲到主循環之外。
或者如果您想運送/定位您自己的組件,您可以嘗試覆蓋組件探測:Link。
您可以使用安裝項目爲您的應用程序構建安裝程序。這將分析所有的靜態依賴關係,並生成一個安裝程序,以確保目標機器獲取所需的所有內容。
(我已經設定在這一個社區擁有的標誌,因爲這是大多都是源自我內心的本能,我可能已經錯過了在某處有一個關鍵步驟)
簡答:使用安裝程序在應用程序旁邊部署依賴項通常是一個好主意。沒有他們,就像你注意到的那樣,你的應用程序工作的可能性很小。
龍答:好了,說你有,你要提供,如果別的東西安裝在目標機器上額外功能。下面是一些一般原則去做:
任何時候你去構建以前包裝類之一,則必須使用System.Activator.CreateInstance
方法,並將其包裝在一個try/catch在7個不同的異常類型過濾:
FileNotFoundException
FileLoadException
BadImageFormatException
TypeLoadException
MissingMethodException
MissingMemberException
MissingFieldException
如果其中之一被捕獲,您必須提供一個替代的實施先前創建的界面,或使之檢查空它引用該對象的任何時間編寫代碼。
感謝您的解釋,我使用Josh提供的示例代碼,但此信息也非常有用 – beakersoft 2008-09-20 15:27:47