dll的FileVersion和ProductVersion有什么区别?

Pet*_*ier 38 .net versioning

dll的FileVersion和ProductVersion有什么区别?

特别是在运行时,是一个用于强绑定,另一个用于信息?

我想手动设置一个,另一个自动递增(通过我们的CI构建过程)

编辑:理查德在原始问题中回答了我错过的部分.这是我想要手动控制的汇编版本(通过界面更改递增),而它是我希望我的CI系统在每次构建时自动递增的文件版本.谢谢.

Joe*_*orn 27

文件作为较大项目的一部分进行分发.具有单独构建版本x的文件可能作为项目版本y的一部分进行分发.

详细说明:产品版本1.1的A.exe附带文件B.dll和C.dll.一切都从匹配的产品和文件版本开始.然后有人在产品中发现了一个严重的错误.开发人员查看它,并发布仅更新B.dll的修复程序.现在产品版本也可能更新到1.1.1以解释次要修复.而B.dll的文件版本也将是1.1.1.但A.exe和C.dll没有改变,所以他们的文件版本可能仍然是1.1.

  • 因此,如果只有一个可执行文件没有其他DLL,我应该保持文件版本和产品版本相同,并在每个新版本中逐步更新它们吗? (2认同)

Ric*_*ard 22

两者都不用于强绑定(完整/强名称的版本方面来自AssemblyVersion属性).

文件版本(来自AssemblyFileVersion属性)和产品版本(来自AssemblyInformationalVersion属性)都对版本资源有贡献(如资源管理器的文件属性中所示).

除了用于显示/诊断目的之外,唯一真正的用途是由安装者验证应该替换的文件.

附录:为什么这些会有所不同?答:因为版本控制要求.保持程序集版本相同意味着更新版本(具有更高的文件版本)将无需更改即可绑定.这对序列化有很大影响(例如,持久化的工作流程).

如果所讨论的程序集不仅仅是一个产品的一部分(例如,可重复使用的第三方库),则文件和产品版本可能会有所不同,如果仅在单个应用程序中使用,则似乎没有理由不保持它们相同.

  • 那么在实践中,为什么我们希望这三个不同呢?我认为 AssemblyVersion 应该占主导地位,不是吗? (2认同)

Gie*_*ius 7

这两者之间还有一个区别:在文件版本中,您只能在版本部分中使用等于或大于 0 的整数。

在产品版本中,您可以使用任何文本,如果它不能解析为数字,它将产生警告,但根据 msdn 的警告是无害的。

现在为什么你不仅要在版本中使用数字?
好吧,根据语义版本控制 (semver.org) 版本如下所示: [Major].[Minor].[Patch] 并且在补丁中您可以使用:

  • 破折号后的预发布元数据,例如 1.2.1-beta
  • 在加上之后构建元数据,例如来自 git 1.2.1+f0f0f0f 的短哈希