Как обнаружить отсутствующую ссылку .NET во время выполнения?

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

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

6
задан Madhur Ahuja 28 July 2011 в 06:01
поделиться