在.NET中测试DLL之间的兼容性

时间:2012-02-17 13:35:51

标签: c# .net visual-studio dll assemblies

我正在使用Visual Studio 2010和WinForms,.Net 4.0(C#)。我正在构建一个包含大量DLL的应用程序(150)。当我向我的客户提供应用程序时,它是:

  1. 可执行文件(.exe)
  2. Dll文件(.dll)
  3. 每个Dll都与应用程序的模块相关,例如:

    • Ado.dll(提供对数据库的访问)
    • AccesManagement.dll(此模块允许管理应用程序中的用户)
    • Import.dll(此模块允许用户将数据导入应用程序)

    当我的客户端在应用程序中发现错误时,我会更正它并向他提供受影响的DLL(以避免他测试所有应用程序)。它可以是例如Import Dll。

    事情是,在一些交付之后,我们可能在Dll之间存在兼容性问题(例如,在新的DLL中不再存在的方法)。为了避免这个问题,我想找到一个能够检查不同DLL之间兼容性的工具。

    我想要像:

    1. 我指定要分析的程序的目录(可执行文件+ Dll)
    2. 我启动了分析
    3. 该程序告诉我例如:Import.dll和Ado.dll之间出错,Import.dll中有一个类xxx,期望在Ado.dll类xxx中有一个名为xxx的方法
    4. 我发现一些工具可以比较两个版本的Dll,并提供添加和删除的成员(Libcheck,ApiChange),但这对我来说太复杂了,因为有很多变化。

2 个答案:

答案 0 :(得分:1)

我认为您可能会遇到配置管理问题 - 至少与您遇到“兼容性”问题一样多。

我建议您找到一种方法来跟踪您的每个客户正在使用哪些程序集的版本,以便(1)您在决定发货时知道他们使用的是什么,以及(2)他们何时报告错误,你可以复制他们的设置(从而,复制他们的错误)。如果这听起来像很多工作,那就是。这就是为什么许多软件开发商店采取措施确保客户设置的变化受到限制的原因。几乎可以肯定的是,您最终会得到客户对客户的一些变化,但是您可以采取的任何措施来管理这个问题都是有益的。

除了过程影响之外,如果你真的需要创建一个“可插拔”环境,你可能需要为你的对象创建一些接口来控制它们连接的点,你应该看看微软的Managed Extensibility Framework(MEF)。 MEF可以帮助您管理对象“要求”来自其他对象的行为。

答案 1 :(得分:0)

我终于找到了解决问题的方法。

因为我:

  • 使用SourceSafe并使用我正在构建的应用程序版本添加标签
  • 使用应用程序的版本标记每个DLL

我建立了一个能够:

的程序
  • 打开文件夹的每个Dll以读取其中的应用程序版本
  • 从SourceSafe获取DLL中指定版本的每个项目(使用功能“获取标签”)

然后我只需要构建项目。如果存在任何编译错误,则存在兼容性问题。

此解决方案可以避免大的兼容性问题,但您仍然可以使用编译时无法看到的兼容性问题...