2009-04-15 119 views
33

dll的FileVersion和ProductVersion有什么区别?dll的FileVersion和ProductVersion有什么区别?

具体在运行时,是用于强绑定还是其他信息?

我想有一个手动设定,以及其他自动递增(通过我们的CI构建过程)

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

+0

有关AssemblyVersion,AssemblyFileVersion和AssemblyInformationalVersion(即程序集版本,文件版本和产品版本)的一些信息,请查看http://stackoverflow.com/a/802038。 – user276648 2012-12-11 01:56:41

回答

16

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

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

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

附录:为什么这些会不同?答:由于版本要求。保持组装版本相同意味着更新的版本(具有更高的文件版本)将不加改变地进行绑定。这对序列化有很大影响(例如持久化的工作流程)。

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

+1

所以在实践中,我们为什么要让这三个不同呢? Imo AssemblyVersion应该规则,否? – 2009-04-15 15:33:13

+0

@彼得:很好的问题......扩展了一些简短的评论,但是这确实需要一个自己的问题。 – Richard 2009-04-15 16:19:30

23

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

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

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

现在为什么你不仅要使用版本号码?
那么,根据语义版本(semver.org)版本是这样的:。 [大] [小] [电脑]和补丁你被允许使用:

  • 预发布元数据破折号后,例如1.2.1-beta
  • 建立元数据后,加上,例如来自git 1.2的短散列。1 + f0f0f0f