如何在运行时检测缺少的.NET引用?

时间:2011-07-27 16:17:21

标签: .net reference .net-assembly

我的应用程序包含对外部库(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 block)。

问题2:有更好的选择吗?

特别是,我担心函数内联等优化可能会阻止我的代码工作。

1 个答案:

答案 0 :(得分:4)

这是预期的,因为JIT在每个方法级别是懒惰的。请注意,内联在这里不是问题,因为这也是JIT关注的问题,而不是编译器问题。

更好的选择:

  • 确保应用已安装所需的一切
  • 使用ilmerge或类似方法创建单个程序集(如果可能)

就个人而言,我只是使用第一个选项。

相关问题