6
我的應用程序包含對外部庫(SQL Server管理對象)的引用。顯然,如果庫在運行時系統上不存在,只要沒有使用來自該庫的類的方法調用,該應用程序仍然工作。如何在運行時檢測缺少的.NET引用?
問題1:這是CLR加載庫方式的特定行爲還是(幸運的)副作用?
爲了檢測參考是否可以訪問,我目前使用這樣的代碼:
Function IsLibraryAvailable() As Boolean
Try
TestMethod()
Catch ex As FileNotFoundException
Return False
End Try
Return True
End Function
Sub TestMethod()
Dim srv As New Smo.Server() ' Try to create an object in the library
End Sub
它的工作原理,但它似乎是相當難看。請注意,它只適用於TestMethod是單獨的方法,否則將拋出開始IsLibraryAvailable
(在try-catch之前,即使try-catch塊內發生對象實例化)也會發生異常。
問題2:是否有更好的選擇?
特別是,我擔心像函數內聯這樣的優化會阻止我的代碼工作。
當庫不可用時,觸發動態編譯(以及類似事件)的事情可能會導致看似無關的代碼失敗。例如,序列化/反序列化,當一個看起來不相關的引用程序集丟失時,ASP.NET Profile功能失敗了。它創建非常非常困難的調試問題。 – MatthewMartin
@MthethewMartin:謝謝,很高興知道。 – Heinzi