兼容性 是指在最初开发代码的版本以外的 .NET 实现版本上编译或执行代码的功能。 特定更改可以通过六种不同的方式影响兼容性:
行为更改
行为更改表示对成员行为的更改。 更改可能是外部可见的(例如,方法可能会引发不同的异常),或者它可能表示已更改的实现(例如,计算返回值的方式发生更改、内部方法调用的添加或删除,甚至显著提高性能)。
当行为更改在外部可见并修改类型的公共协定时,它们很容易评估,因为它们会影响二进制兼容性。 实现更改更难评估;根据更改的性质以及 API 的使用频率和模式,更改的影响可能从严重到无害。
二进制兼容性
二进制兼容性是指 API 使用者在不重新编译的情况下在较新版本上使用 API 的能力。 向类型添加新接口实现等更改不会影响二进制兼容性。 但是,删除或更改程序集的公共签名,以便使用者不能再访问程序集公开的同一接口会影响二进制兼容性。 此类更改称为 二进制不兼容更改。
源兼容性
源兼容性是指 API 的现有使用者能够在不进行任何源更改的情况下针对较新版本重新编译。 当使用者需要修改源代码,以便针对较新版本的 API 成功编译时,会发生不兼容源代码的更改 。
设计阶段兼容性
设计时兼容性是指跨 Visual Studio 版本和其他设计时环境保留设计时体验。 虽然这可以涉及设计器的行为或 UI,但设计时兼容性最重要的方面涉及项目兼容性。 项目或解决方案必须能够在较新版本的设计时环境中打开和使用。
向后兼容性
向后兼容性是指 API 的现有使用者在使用新版本时,能够继续以相同的方式运行并保持相同的功能表现。 行为更改和二进制兼容性的改变都会影响向后兼容性。 如果使用者在针对较新版本的 API 运行时无法运行或行为不同,则 API 向后不兼容。
不建议对影响向后兼容性的更改,因为开发人员希望在较新版本的 API 中实现向后兼容性。
向前兼容性
向前兼容性是指一个 API 的现有使用者能够针对旧版本运行,同时维持相同的行为。 如果客户端在针对旧版 API 运行时无法运行或行为不同,则 API 是前向不兼容的。
维护向前兼容性实际上会阻止从版本到版本的任何更改或添加,因为这些更改会阻止面向更高版本的使用者在早期版本下运行。 开发人员期望依赖较新的 API 的使用者可能无法针对较旧的 API 正常工作。
维护向前兼容性不是 .NET Core 的目标。