dll的FileVersion和ProductVersion有什么区别?

时间:2009-04-15 15:11:09

标签: .net versioning

dll的FileVersion和ProductVersion有什么区别?

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

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

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

3 个答案:

答案 0 :(得分:25)

文件作为较大项目的一部分进行分发。具有单独构建版本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。

答案 1 :(得分:19)

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

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

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

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

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

答案 2 :(得分:2)

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

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

现在为什么你不仅要使用版本中的数字?
那么,根据语义版本(semver.org)版本看起来像这样: [专业]。[次要]。[补丁]和补丁你可以使用:

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