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

本文关键字:兼容性 之间 DLL NET 测试 | 更新日期: 2023-09-27 18:24:54

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

  1. 可执行文件(.exe)
  2. Dll文件(.Dll)

每个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的方法

我发现了一些工具可以比较Dll的两个版本,并提供添加和删除的成员(Libcheck、ApiChange),但这对我来说太复杂了,因为有太多的更改。

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

我认为这里可能存在配置管理问题——至少与"兼容性"问题一样严重。

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

除了过程影响之外,如果你真的需要创建一个"可插拔"环境,你可能需要为你的对象创建一些接口来控制它们连接的点,你可能应该看看微软的托管扩展框架(MEF)。MEF可以帮助您管理对象从其他对象"要求"行为的方式。

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

因为我是:

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

我建立了一个程序,它能够:

  • 打开文件夹的每个Dll以读取其中的应用程序版本
  • 从SourceSafe获取DLL中指定版本的每个项目(函数为"Get-Label")

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

这个解决方案可以避免大的兼容性问题,但仍然可能存在编译无法看到的兼容性问题。。。