2008-09-20 71 views
1

以前我从来没有真正做过的事情,但确保我的应用程序使用的任何外部程序集/ dll可用,并且可能是正确版本的最佳方法是什么?检查vb.net中的外部依赖关系

我写了一个依赖于System.Data.SQLite.dll的应用程序,我去测试它在那个DLL丢失的机器上,我的应用程序只是抛出一个运行时异常,因为DLL丢失。我如何捕获这个错误?

回答

1

你想要做的就是使用反射来检查程序集是否可以加载到内存中。将它封装在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 
0

您应该将错误捕获到主循环之外。
或者如果您想运送/定位您自己的组件,您可以尝试覆盖组件探测:Link

0

您可以使用安装项目为您的应用程序构建安装程序。这将分析所有的静态依赖关系,并生成一个安装程序,以确保目标机器获取所需的所有内容。

1

(我已经设定在这一个社区拥有的标志,因为这是大多都是源自我内心的本能,我可能已经错过了在某处有一个关键步骤)

简答:使用安装程序在应用程序旁边部署依赖项通常是一个好主意。没有他们,就像你注意到的那样,你的应用程序工作的可能性很小。

龙答:好了,说你有,你要提供,如果别的东西安装在目标机器上额外功能。下面是一些一般原则去做:

  1. 对于具有字段,属性,事件,参数,或返回值,它引用可能未安装集中定义的类型的任何类型:必须用一个接口包裹,并替换所有其他字段,参数,返回值或局部变量声明以使用该接口。
  2. 任何时候你去构建以前包装类之一,则必须使用System.Activator.CreateInstance方法,并将其包装在一个try/catch在7个不同的异常类型过滤:

    • FileNotFoundException
    • FileLoadException
    • BadImageFormatException
    • TypeLoadException
    • MissingMethodException
    • MissingMemberException
    • MissingFieldException

    如果其中之一被捕获,您必须提供一个替代的实施先前创建的界面,或使之检查空它引用该对象的任何时间编写代码。

+0

感谢您的解释,我使用Josh提供的示例代码,但此信息也非常有用 – beakersoft 2008-09-20 15:27:47