以前我从来没有真正做过的事情,但确保我的应用程序使用的任何外部程序集/ dll可用,并且可能是正确版本的最佳方法是什么?检查vb.net中的外部依赖关系
我写了一个依赖于System.Data.SQLite.dll的应用程序,我去测试它在那个DLL丢失的机器上,我的应用程序只是抛出一个运行时异常,因为DLL丢失。我如何捕获这个错误?
以前我从来没有真正做过的事情,但确保我的应用程序使用的任何外部程序集/ dll可用,并且可能是正确版本的最佳方法是什么?检查vb.net中的外部依赖关系
我写了一个依赖于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
您应该将错误捕获到主循环之外。
或者如果您想运送/定位您自己的组件,您可以尝试覆盖组件探测:Link。
您可以使用安装项目为您的应用程序构建安装程序。这将分析所有的静态依赖关系,并生成一个安装程序,以确保目标机器获取所需的所有内容。
(我已经设定在这一个社区拥有的标志,因为这是大多都是源自我内心的本能,我可能已经错过了在某处有一个关键步骤)
简答:使用安装程序在应用程序旁边部署依赖项通常是一个好主意。没有他们,就像你注意到的那样,你的应用程序工作的可能性很小。
龙答:好了,说你有,你要提供,如果别的东西安装在目标机器上额外功能。下面是一些一般原则去做:
任何时候你去构建以前包装类之一,则必须使用System.Activator.CreateInstance
方法,并将其包装在一个try/catch在7个不同的异常类型过滤:
FileNotFoundException
FileLoadException
BadImageFormatException
TypeLoadException
MissingMethodException
MissingMemberException
MissingFieldException
如果其中之一被捕获,您必须提供一个替代的实施先前创建的界面,或使之检查空它引用该对象的任何时间编写代码。
感谢您的解释,我使用Josh提供的示例代码,但此信息也非常有用 – beakersoft 2008-09-20 15:27:47