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

本文关键字:API 兼容性 之间 程序集 何测试 测试 net | 更新日期: 2023-09-27 18:16:02

我有一个程序集,它提供了一个API,供其他一些程序集使用。我需要验证新版本的API dll是否仍然与使用旧版本API的旧程序集兼容。

我发现了一些同样的问题,但是没有答案可以解决我的问题:

  • 验证公共api兼容性的工具
  • 工具向后兼容c#/。净API

建议的工具只能比较两个程序集,并指出API中是否存在可能的破坏性变化,但不能说明最新的API是否真的破坏了使用它的旧程序集。我想找到一个工具或编写一个测试,将能够检查是否每个旧的dll可以与我的新API dll一起工作。

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

    关于。net中api破坏变化的明确指南
  • 。. NET:关于AssemblyVersion,什么定义了二进制兼容性?

目前,我看到的唯一解决方案是用最新的API编译旧程序集的源代码,但我只想用程序集来做,并将它们添加到我的单元测试中。还有更好的办法吗?

编辑:

我正在寻找一个工具,将能够自动验证。net程序集之间的向后兼容性的过程。(命令行或一些API)

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

您需要做的是做一个diff并生成一个破坏性更改的列表。然后,您想要搜索您的程序集是否使用了任何损坏的api。您可以使用ApiChange工具来完成此任务,并找到受其影响的任何用户。

让它更具体。如果你从接口中删除了一个方法,那么你需要在使用该接口方法的类或任何实现该方法的类中找到该方法的所有实现者和用户。

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

Edit1:

我只是忘了:ApiChange工具实际上已经具有您感兴趣的功能。它是选项

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

我们确实在我们部门使用了它,效果很好。唯一的问题是XML智能感知文件。如果另一个目标不使用被删除的方法,而是在XmlDoc中引用它,编译器将写一个警告,指出引用了一个不存在的方法。这很难捕捉,还需要解析智能感知文档文件。但这是一个非常极端的例子。

我花了一天的时间寻找这个问题的答案。似乎相关(无用的封闭)问题所引用的工具现在已经死了,或者像。但是我刚刚看了一下Telerik的汇编diff工具JustAssembly,它看起来比你自己的要好得多,如果你看一下他们的库,你会发现它似乎是一大堆工作,很可能出错。

他们有一个UI,从集成到你的CI构建的角度来看没有多大帮助,它是非常基本的,但你可以从源代码构建库,我刚刚做了,库看起来有你需要的一切,让你自己快速运行。