2009-04-15 79 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