C#类向后兼容性规则/避免中断更改

时间:2011-02-22 22:42:50

标签: c# .net backwards-compatibility

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

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

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

在我当前尝试更新类客户端之后,抛出“找到的程序集的清单定义与程序集引用不匹配”异常。

3 个答案:

答案 0 :(得分:3)

最好的参考是贾斯汀的答案:A definite guide to API-breaking changes in .NET

@Justin - 如果您发布此答案,我会给您支票。

答案 1 :(得分:2)

您必须维护相同的程序集版本(即不要跨构建增加它) - 请参阅AssemblyVersionAttribute in MSDN

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

答案 2 :(得分:2)

他得到的错误与类之间的兼容性无关,而是与加载程序集有关 - 请参阅The located assembly's manifest definition does not match the assembly reference是否有帮助。

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