关于.net:C#类向后兼容性规则/避免重大变更

Rules for C# class backward compatibility/avoiding breaking changes

我正在开发一个C 3.5程序集,它在企业服务器环境中被许多不同的应用程序使用。我想将一些属性添加到现有的C类(不是抽象类),并在不重新编译的情况下保持与当前客户机的向后兼容性。它是一个名为3.5的程序集。不会重新编译现有的客户端应用程序。相反,我们使用发布者策略程序集将现有客户端重新定向到更新的版本。

维护此类向后兼容性的规则是什么?

我正在寻找一些可以用来验证代码更改的规则集。

在我当前更新类的尝试之后,客户机将引发"定位的程序集的清单定义与程序集引用不匹配"异常。


最好的参考是Justin的答案:一个明确的指南,它将打破.NET中API的变化。

@贾斯汀-如果你把这个贴出来作为答案,我会给你支票的。


在他看来,您得到的错误与类之间的兼容性无关,而是与加载程序集的问题有关-请参阅所定位的程序集的清单定义与程序集引用不匹配(如果有帮助的话)。

将属性/方法添加到现有类应该可以实现向后兼容性。删除字段/方法/属性,将类更改为结构,更改基类绝对不是。修改常量、枚举值是危险的。


您必须维护相同的程序集版本(即不要在构建之间增加版本)-请参阅msdn中的AssemblyVersionAttribute

另外,您可以利用程序集绑定重定向,但这涉及到配置文件更改,我不希望在您的情况下进行更改。