首页 > 解决方案 > 自动检查二进制兼容性?

问题描述

我试图找到一种方法来提醒我的开发人员他们的更改可能会破坏二进制兼容性。


我们的应用程序的结构使其提供了一个核心框架,可供 20 多个(独立部署的)子 DLL 使用。如果对核心框架进行更改,子 DLL 可能会中断。

对于这个特定的应用程序,我们不一定关心核心框架是否保持完全的向后兼容性,这样方法必须始终输出相同的值/以相同的方式操作输入。因此,在修改框架组件时,插入核心框架的子 DLL 可能会“免费”获得修复。

在过去的几周里,我们看到了两种情况,它们都破坏了二进制兼容性,需要立即修复:

  1. 接口修改void SomeMethod(List<...> someList);SomeMethod(IList<...> someList);
  2. 静态助手修改为添加一个可选参数,例如public static int FancyCompare(..., string right)public static int FancyCompare(..., string right, int maxPrecision=3);

在这些情况下,问题直到生产才被发现,因为我们的自动化 Bamboo 构建总是针对最新的签入和执行代码的测试重新编译,它们并没有真正检查顶级方法签名。我们目前没有办法让 Bamboo 与之plugin_vOld对抗core_vNew


我可以通过禁止对核心接口的所有更改并要求开发人员创建新接口来解决接口问题,然后让具体实现实现多个接口,但这会很快变得混乱。这仍然无法解决可选参数问题。

有谁知道,例如,一个 VS 或 Resharper 插件会提醒开发人员他们的更改破坏了二进制兼容性?或者也许是 Bamboo 构建系统插件?还是别的什么方法?

标签: c#.netresharper

解决方案


推荐阅读