2011-02-22 59 views
22

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

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

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

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

+3

请参阅[.NET中API断开更改的明确指南](http://stackoverflow.com/questions/1456785/a-definite-guide-to-api-breaking-changes-in-net) – Justin 2011-03-16 02:25:20

+0

@ Kragen - 谢谢!我见过的最佳参考。如果你让你的评论成为答案,我会接受它。 – ErnieL 2011-03-16 15:44:52

回答

2

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

此外,你可以利用程序集绑定重定向,但涉及配置文件的变化,我不指望在你的情况下是可取的。

+0

我们有处理版本号更改的发布者策略程序集:http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx。这不是问题。 – ErnieL 2011-02-22 23:14:27

2

在他的错误,你正在得到与类之间的兼容性无关,而是问题加载程序集 - 见The located assembly's manifest definition does not match the assembly reference如果有帮助。

为了向后兼容性,向存在类添加属性/方法应该没问题。删除字段/方法/属性,将类更改为结构,更改基类绝对不是。修改常量,枚举值是危险的。

+0

你在说什么符合我的理解。然而,我仍然设法打破了一些东西......你知道任何地方这是正式记录?我在谷歌和MSDN搜索尝试失败。 – ErnieL 2011-02-22 23:03:49

+0

我不知道MSDN是否有很好的概述。如果您有时间阅读“框架设计指南”,我建议您阅读这本书,因为它涵盖了设计类层次结构时遇到的各种问题。您还可以阅读博客,如http://blogs.msdn.com/b/bclteam/archive/2004/09/07/226489.aspx和http://blogs.msdn.com/b/kcwalina/archive/tags/ design + guidelines/default.aspx – 2011-02-23 01:16:59

+1

将字段更改为属性是NO-NO-NO(显然是相反的,字段的属性是NO-NO-NO)。添加一个IDisposable接口是对用户POV的突破性改变,但可能不会直接破坏事物的运行(只是资源不会被及时释放) – xanatos 2011-02-24 06:59:23