在vb.net中检查外部依赖关系
时间:2020-03-06 14:29:08 来源:igfitidea点击:
我以前从未真正做过的事情,但是什么是确保我的应用程序使用的任何外部程序集/ dll可用以及最佳版本的最佳方法是什么。
我编写了一个依赖于System.Data.SQLite.dll的应用程序,然后在缺少该dll的计算机上进行了测试,而我的应用程序由于该dll丢失而抛出了运行时异常。我如何捕获此错误?
解决方案
我们应该将错误捕获到主循环之外。
或者,如果我们想运送/定位自己的装配,则可以尝试覆盖装配探测:链接。
我们要做的是使用反射检查并查看程序集是否可以加载到内存中。将其包装在try..catch块中,并处理来自它的任何特定异常。
Try Assembly.Load("System.Data.SQLite, Version=1.0.22.0, Culture=neutral, PublicKeyToken=DB937BC2D44FF139"); Catch ex As FileNotFoundException //do something here End Try
我们可以使用安装项目来为应用构建安装程序。这将分析所有静态依赖项,并生成一个安装程序,以确保目标计算机获得所需的一切。
(我已经在这个标志上设置了社区拥有的标志,因为这主要是出于我的直觉,而且我可能错过了某个地方的关键一步)
简短的答案:通常,使用安装程序在应用程序旁边部署依赖项是一个好主意。我们已经注意到,没有它们,应用程序运行的机会就很小。
长答案:好吧,如果目标计算机上安装了其他功能,则说我们要提供额外的功能。这里是一些通用的指导方针:
- 对于具有引用可能在已卸载的程序集中定义的类型的字段,属性,事件,参数或者返回值的任何类型:必须用接口包装,并替换所有其他字段,参数,返回值或者局部使用接口的变量声明。
FileLoadException
- BadImageFormatException
TypeLoadException
MissingMethodException
MissingMemberException
MissingFieldException
如果捕获到其中之一,则必须提供先前创建的接口的替代实现,或者编写代码,以便在引用该对象时每次检查null。