我正在尝试寻找一种方法来警告开发人员,他们的更改可能会破坏二进制兼容性。
我们的应用程序的结构使其提供了20多个(独立部署的)子DLL消耗的核心框架。如果对核心框架进行了更改,则子DLL可能会损坏。
对于此特定应用程序,我们不必关心核心框架保持完全的向后兼容性,这样方法必须始终输出相同的值/以相同的方式操纵输入。因此,在修改框架组件时,插入核心框架的子DLL可能会“免费”获得修复程序。
在过去的几周中,我们看到了两个案例,它们都破坏了二进制兼容性并需要立即修复:
void SomeMethod(List<...> someList);
修改为SomeMethod(IList<...> someList);
public static int FancyCompare(..., string right)
添加可选参数,例如public static int FancyCompare(..., string right, int maxPrecision=3);
在这些情况下,直到生产时才发现问题,因为我们的自动化Bamboo版本始终根据最新的检入和我们执行代码的测试进行重新编译,它们实际上并不检查顶级方法签名。目前,我们没有办法让Bamboo对plugin_vOld
运行core_vNew
。
通过禁止对核心接口进行所有更改并要求开发人员创建新接口,然后让具体实现实现多个接口,我可能会解决接口问题,但这会很快变得混乱。仍然无法解决可选参数问题。
有人知道例如VS或Resharper插件,该插件会警告开发人员其更改会破坏二进制兼容性吗?也许是Bamboo构建系统插件?还是其他方法?