Лично я бы просто использовал первый вариант.
риложение содержит ссылки на внешнюю библиотеку (объекты управления SQL Server). По-видимому, если библиотека отсутствует в системе времени выполнения, приложение все еще работаетдо тех пор, пока не вызываются методы, которые используют классы из этой библиотеки.
Вопрос 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: есть ли лучшая альтернатива?
В частности, я боюсь, что такие оптимизации, как встраивание функций, могут помешать моему коду работать.