2012-02-17 52 views
1

我正在使用Visual Studio 2010和WinForms,.NET 4.0(C#)。我正在构建一个包含很多DLL的应用程序(150)。当我提供应用程序给我的客户,它是:在.NET中测试DLL之间的兼容性

  1. 的可执行文件(.exe)
  2. .dll文件(.dll文件)

每个DLL是关系到应用程序的模块,用于例如:

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

当我的客户发现应用程序中的一个bug,我改正它,我向他提供受影响的DLL(为了避免他测试所有的应用程序)。它可以是例如导入Dll。

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

我想是这样的:进口之间的错误:

  1. 我指定程序的目录来分析(可执行文件+ DLL)
  2. 我启动了分析
  3. 程序告诉我,例如.dll和Ado.dll,在Import.dll中有一个xxx类,期望在Ado.dll的类xxx中有一个名为xxx的方法

我发现了一些工具可以比较两个版本的Dll和p rovide添加和删除成员(Libcheck,ApiChange),但这对我来说太复杂了,因为有很多变化。

+0

你基本上是寻找一种依赖性分析工具。在将这些修改过的程序集发送给客户端之前,我建议您在对某些程序集进行更改时,对应用程序进行更彻底的测试。 – Bernard 2012-02-17 13:41:21

+1

是不是你所说的称为接口?你应该依赖于接口而不是具体的实现。 – rene 2012-02-17 13:43:32

+3

看看[在.NET中API断开更改的明确指南](http://stackoverflow.com/questions/1456785/a-definite-guide-to-api-breaking-changes-in-net)。我不知道有任何工具可以测试这些,但是意识到可以做什么和不可以做什么应该可以帮助您在将来避免这些问题。 – Justin 2012-02-17 13:43:58

回答

1

我想你可能在这里有一个配置管理问题 - 至少和你有一个“兼容性”问题一样多。

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

超越过程的影响,如果你真的需要创建一个“可插拔”的环境中,你可能需要创建一些接口为对象,以控制他们连接点,你应该看看微软的ManagedExtensibilityFramework( MEF)。 MEF可以帮助您管理对象从其他对象“请求”行为的方式。

+1

+1。我还建议自动化构建,并注意修订/源代码控制不是一个选项,它是强制性的。 – TrueWill 2012-02-17 14:10:53

0

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

由于我:

  • 使用的SourceSafe与我建立
  • 与应用

的版本标记每个我的DLL的应用程序的版本添加标签我建立了一个程序,它能够:

  • 打开文件夹的每个Dll以读取在它
  • 从SourceSafe获取在DLL中指定的版本每个项目的应用程序(随着functionnality“获取标签”)

然后我就必须建立谟。如果有任何编译错误,则存在兼容性问题。

该解决方案可避免大的兼容性问题,但你仍然可以有不能用汇编中可以看出兼容性问题...