C# 版本控制
C# 版本控制
一、后向兼容
名称 | 说明 | 简述 |
---|---|---|
二进制兼容 | 在没有重新编译的情况下,如果依赖于先前版本的应用程序适用于新版本,则新版本的库是二进制兼容的。 | 直接替换为新版本的dll而不影响程序启动、运行的。 |
源兼容 | 如果重新编译时,依赖于先前版本的代码适用于新版本,则新版本的库与先前版本是源兼容的。 | 需重新编译但无需改源代码的。 |
二、语义化版本控制
语义版本控制(简称 SemVer)是应用于库版本的命名约定,用于表示特定里程碑事件。 理想情况下,提供给库的版本信息应帮助开发人员确定版本是否与使用相同库的早期版本的项目兼容。
即开发人员之间的约定:通过版本号,可判断一个库的后向兼容性。
SemVer 的最基本方法是 3 组件格式 MAJOR.MINOR.PATCH,其中:
- 进行不兼容的 API 更改时,MAJOR 将会增加
- 删除公共方法或属性
- 更改方法签名
例如:原库有方法A,其参数1个,但新版本该方法增加了1个参数。 - 以打破预期的方式更改现有方法的行为
例如:原库有方法A,其捕获并处理了某异常,但新版本该方法不再处理该异常,而是直接throw此异常。
- 以后向兼容方式添加功能时,MINOR 将会增加
- 添加新的公共方法或属性
- 添加新的重载
- 向现有方法添加可选参数
- 进行后向兼容 bug 修复时,PATCH 将会增加
- 修复现有方法实现中的 bug
- 不会更改 API 的性能改进
三、程序集绑定重定向
可使用 app.config 文件更新应用使用的库版本。通过添加所谓的绑定重定向,可在无需重新编译应用的情况下使用新的库版本。
<dependentAssembly>
<assemblyIdentity name="ReferencedLibrary" publicKeyToken="32ab4ba45e0a69a1" culture="en-us" />
<bindingRedirect oldVersion="1.0.0" newVersion="1.0.1" />
</dependentAssembly>
Note:仅当 ReferencedLibrary 的新版本与应用二进制兼容时,此方法有效。
更新后的程序将使用新版本的库。