如何测试.net程序集之间API的向后兼容性

我有一个提供API的程序集,并被其他程序集使用。 我需要validation较新版本的API dll是否仍然与使用旧版API的旧程序集兼容。

我发现了几个问同样的问题,但没有解决问题的答案:

  • 用于validation公共API的兼容性的工具
  • 用于C#/ .NET API的向后兼容性的工具

建议的工具只能比较两个程序集,并说明API中是否存在可能的重大更改,但如果最新的API确实破坏了使用它的旧程序集,则不会。 我想找一个工具或编写一个能够检查每个旧dll是否可以使用我的新API dll的测试。

至于API的变化,我更有可能只扩展它,但即使它仍然可以破坏旧程序集中的代码。 可以在此处找到一些此类更改的示例:

  • .NET中API破坏性更改的明确指南
  • .NET:关于AssemblyVersion,什么定义了二进制兼容性?

现在,我看到的唯一解决方案是使用最新的API编译旧程序集的源代码,但我想只使用程序集并将它们作为unit testing的一部分添加。 有什么更好的办法可以解决这个问题吗?

编辑:

我正在寻找一种能够自动validation.net程序集之间向后兼容性的过程的工具。 (命令行或者也有api)

你想要的是做一个差异并生成一个突破性的变化列表。 然后,您想要搜索您的程序集是否使用任何损坏的API。 您可以使用ApiChange工具执行此操作以执行差异并查找其受影响的任何用户。

使其更具体。 如果已从接口中删除方法,则需要在使用接口方法的类或任何实现此方法的类中查找此方法的所有实现者和用户。

ApiChange可以使用命令-whoimplementsinterface和-whousesmethod在命令行上搜索特定方法的实现者和用户。 它不是在命令行自动化,但您可以直接使用ApiChange.Api.dll来自动执行此查询。

EDIT1:

我忘记了:ApiChange工具实际上已经具有您感兴趣的function 。 这是选择

-ShowrebuildTargets -new -old [-old2] -searchin

我们确实在我们的部门使用它,效果很好。 唯一的问题是XML Intellisense文件。 如果另一个目标不使用已删除的方法但在XmlDoc中引用它,编译器将写入一个警告,表明引用了一个非现有方法。 这很难捕获并且还涉及解析intellisense docu文件。 但这是一个非常有利的案例。

我花了一整天的时间来寻找答案。 似乎相关(无益关闭)问题上引用的工具现在已经死亡或者同样好。 但是我刚刚看了一下Telerik的汇编差异工具JustAssembly ,这看起来比滚动你自己要好得多,如果你看看他们的库似乎是一大堆工作而且可能出错。

从集成到CI构建的角度来看,它们有一个UI没有那么大的帮助,它是非常基础的,但你可以从源代码构建库,我刚刚完成了库,库看起来像它拥有快速启动和运行所需的一切。