8

对强名称程序集进行哪些更改需要更改 AssemblyVersionAttribute?显然,以可能需要客户端必须进行代码更改的方式更改公共 api 需要增加 AssemblyVersion。但是对于不需要在客户端更改代码的公共 API 的更改呢?例如:

  • 添加公共类或接口?
  • 将公共成员添加到公共类或接口?(编辑:drscroogemcduck 在下面正确指出,将成员添加到接口会影响所有实现者。愚蠢的我。)
  • 增加班级成员的知名度?

在 MSDN 上的某个地方(或者,知道 MS,在一些 MSSE 的个人博客上)必须有明确的文档。但我根本找不到它。请帮忙!

4

4 回答 4

5

回应 Martijn 的赏金:

关于二进制兼容性的最佳参考资料在社区 Wiki 上。

.NET 中 API 破坏性更改的明确指南

于 2013-04-16T21:10:25.487 回答
4

这很容易......只要类型保持不变(在其公共或受保护的布局中)并且方法签名没有改变(添加方法或类型很好),JIT 应该能够很好地链接 DLL。

也就是说,我认为即使它确实有效,你也不应该这样做。如果需要,制作一个新版本并使用策略将旧版本映射到新版本。否则,您会直接将自己带回 DLL 地狱……而且我很确定您不希望这样。

于 2009-04-20T15:43:10.230 回答
1

向接口添加方法不应该是好的,因为旧的提供者不会实现新方法。

于 2009-04-20T15:52:38.087 回答
1

Microsoft 在服务包版本中的 .NET 库中添加了新方法/类,而不会更改 AssemblyVersion(仍然是 2.0.0.0 / 3.0.0.0)。Microsoft 仅更改 AssemblyFileVersion。例如,在 .NET 2.0 SP1 中,添加了 DateTimeOffset 结构。

是否应该向我们推荐这种做法,因为 Microsoft 这样做?这令人困惑。

于 2012-05-30T03:55:31.323 回答