.NET分析器:包版本与程序集版本的关联及版本更新方法问询
我来帮你理清这三个版本号的关联和更新策略,毕竟在开发Analyzer with Code Fix项目时,版本号管理对用户体验和维护效率都很重要:
三个版本号的关联
这三个版本各司其职,但通常会保持逻辑上的一致性,方便追踪和维护:
- 包版本:这是你的NuGet包对外展示的核心版本号,用户安装、更新Analyzer时看到的就是它。它遵循语义化版本(SemVer)规范,格式一般为
主版本号.次版本号.修订号,还可以附加预发布标签(比如1.2.3-beta)。 - 程序集版本:这是.NET程序集本身的标识版本,CLR会用它来区分不同版本的程序集,决定是否加载对应的程序集。默认情况下,它会和包版本的前三位(主、次、修订)对齐,你也可以单独配置,但建议和包版本保持关联,避免混淆。
- 程序集文件版本:这是Windows文件系统层面的版本信息,会显示在文件属性的「详细信息」里。它的格式更灵活,通常也会和包版本对应,很多团队会在第四位加上构建编号或日期(比如
1.2.3.20240520),方便追踪具体的构建版本,不过CLR并不依赖它来加载程序集。
简单来说,包版本是给用户看的,程序集版本是给CLR看的,文件版本是给系统/运维人员看的,三者保持关联能让整个版本体系更清晰。
项目修改时的版本号调整策略
根据你修改的类型,按照语义化版本的思路来调整:
- 修复Bug(不破坏现有功能,仅修复问题):
- 包版本:升级修订号,比如从
1.2.3更新到1.2.4 - 程序集版本:保持前三位和包版本一致,第四位可设为修订号或构建号,比如
1.2.4.0 - 程序集文件版本:同步包版本,或加上构建标识,比如
1.2.4.20240520
- 包版本:升级修订号,比如从
- 添加新规则(兼容现有功能,新增特性):
- 包版本:升级次版本号,同时将修订号重置为0,比如从
1.2.3更新到1.3.0 - 程序集版本:对应调整为
1.3.0.0 - 程序集文件版本:同步为
1.3.0.xxx(xxx为构建相关编号)
- 包版本:升级次版本号,同时将修订号重置为0,比如从
- 重大变更(比如修改现有规则的行为,可能导致用户代码出现新的报错):
- 包版本:升级主版本号,次版本和修订号重置为0,比如从
1.2.3更新到2.0.0 - 程序集版本:对应调整为
2.0.0.0 - 程序集文件版本:同步为
2.0.0.xxx
- 包版本:升级主版本号,次版本和修订号重置为0,比如从
另外提个小建议:如果你的项目用自动化构建工具(比如Azure DevOps、GitHub Actions),可以把文件版本的第四位设为自动生成的构建编号,这样每次构建都有唯一的文件版本,方便后续追踪问题。
内容的提问来源于stack exchange,提问作者Mo Sadeghi
相关产品推荐
相关产品推荐

