c# - 自动检查二进制兼容性?
问题描述
我试图找到一种方法来提醒我的开发人员他们的更改可能会破坏二进制兼容性。
我们的应用程序的结构使其提供了一个核心框架,可供 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 构建系统插件?还是别的什么方法?
解决方案
推荐阅读
- python - 在 django 中访问反向关系
- python - 将稀疏矩阵快速插入另一个矩阵
- javascript - 如何调用回调
- c# - System.InvalidOperationException:尝试激活时无法解析服务类型
- vue.js - 在 GmapMap Vue 组件上激活交通层
- angular - EventEmitter 未捕获事件
- spring-boot - 如何加载 @ConditionalOnProperty 设置为 false 的类。?
- python - 在 python sklearn 中加载和使用 XGBoost PMML 或 XGBoost .rds 模型,而不会丢失其依赖项/性质
- c# - c# - 如何在流布局面板拖动中显示自定义用户控件,同时在c#中的Winform中使用移动图标鼠标光标?
- javascript - 如何在 ios 应用程序的 wkwebview 中的 amazon.in 的输入字段中自动填充信用卡/借记卡详细信息?