Лично я бы просто использовал первый вариант.

риложение содержит ссылки на внешнюю библиотеку (объекты управления 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: есть ли лучшая альтернатива?

В частности, я боюсь, что такие оптимизации, как встраивание функций, могут помешать моему коду работать.

Ответы на вопрос(1)

Ваш ответ на вопрос