代码之家  ›  专栏  ›  技术社区  ›  beakersoft

在vb.net中检查外部依赖项

  •  1
  • beakersoft  · 技术社区  · 16 年前

    这是我以前从未真正做过的事情,但是最好的方法是确保我的应用程序使用的任何外部程序集/dll都可用,并且可能是正确的版本。

    我写了一个依赖system.data.sqlite.dll的应用程序,我在一台缺少该dll的计算机上测试它,而我的应用程序只是因为缺少该dll而引发了运行时异常。如何捕获此错误?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Josh    16 年前

    您要做的是使用反射来检查程序集是否可以加载到内存中。将其包装在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
    
        2
  •  1
  •   community wiki Alex Lyman    16 年前

    (我在这张上面设置了社区所有的标志,因为这主要是我本能的反应,我可能错过了在那里的关键一步)

    简短回答: 通常,使用安装程序沿着应用程序一侧部署依赖项是一个好主意。没有它们,正如您所注意到的,应用程序工作的可能性很小。

    长回答: 好吧,假设你有 额外的 如果目标计算机上安装了其他内容,则需要提供的功能。下面是一些一般的指导原则:

    1. 对于具有引用可能已卸载程序集中定义的类型的字段、属性、事件、参数或返回值的任何类型:必须用接口包装,并替换所有其他字段、参数、返回值或本地变量声明以使用该接口。
    2. 任何时候,如果要构造以前包装的类之一,都必须使用 System.Activator.CreateInstance 方法,并对7种不同的异常类型进行try/catch筛选:

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

      如果捕获了其中一个,则必须提供以前创建的接口的替代实现,或者编写代码,以便在引用该对象时检查是否为空。

        3
  •  0
  •   Nescio    16 年前

    您应该在主循环之外捕获错误。
    或者,如果您想装运/定位自己的程序集,可以尝试重写程序集探测: Link .

        4
  •  0
  •   lesscode    16 年前

    您可以使用安装项目为应用程序构建安装程序。这将分析所有静态依赖项,并生成一个安装程序,以确保目标计算机获得所需的一切。