2009-04-13 101 views
3

我開發了一個特定的服務器。到目前爲止,兩個版本不能同時安裝。我們現在正在改變它,問題出現了:應該將版本號附加到服務器組件上嗎?該服務器包含3個exes和5個dll(一些COM,一些原生的VC++)。如果任何一個或全部名稱都包含版本(Serv71.exe,module71.dll)還是沒有?可執行文件的名稱中是否包含版本號?

在專業方面,它應該使管理服務器變得更容易一些。如果某個實例行爲異常,它會在任務管理器中識別出來。另外,如果沒有注意到混合組件版本,就不會有糟糕的安裝結束。

另一方面,這會使開發變得困難一些。服務器不是獨立產品,而是我們應用程序基礎架構的一部分。這意味着它獲得了主應用程序的版本。這給出了,即使某個組件在版本之間完全沒有改變,也必須得到不同的名稱。

總而言之,這不是關鍵問題。我們可以用兩種方式相處。說了這些話,我可能會錯過贏家論點而贊成其中的一種策略。常見的選擇是什麼?你是做什麼?

編輯:我熟悉COM和文件元數據版本控制,並且同意文件名版本是多餘的。我試圖弄清楚什麼更重要 - 不斷的冗餘開銷,或維護中罕見的收益。

回答

1

對於COM API來說,你真的擁有了庫中所需的所有版本信息。我會發現命名這些DLL的版本號是最好的,最壞的情況是混淆的(至少如果版本號不同步)。我希望每當需要清晰的升級路徑並反駁任何更改時,都會將版本標識符附加到接口和共同體名稱。

對於普通的二進制DLL API,附加版本號是一個想法,但不是我曾經很好執行過的一個想法(並且在那些老的16位VB運行時DLL中相當可怕地執行了!)。他們是否有清晰的分隔API,還是他們暴露了幾十個功能?如果接口很大,你會遇到阻礙未成年人改變的問題。一旦你以這種方式開始標註版本,你就必須保持一致。每個版本的變化都意味着靜態鏈接客戶端必須重新編譯(因此版本會自行重新編譯)。這裏潛在的問題是,你會得到很多'版本噪音',隱藏了重要的變化。

Windows二進制文件包含版本元數據(VERSIONINFO結構)。正如LeJeune所說,這是一條衆所周知的路線,儘管當您將錯誤的東西鏈接在一起時,它並不會自動導致錯誤。但是,您可以相對輕鬆地使用它來支持所需的任何配置管理模式。

0

我會說,如果DLL提供不同版本的不同API,版本號應附加到文件名。對於可執行文件無關緊要。如果可執行程序使用指定的接口進行交互,並且發生更改,我還會在可執行文件的文件名中使用版本號。

0

「不利的一面是,它會讓開發變得有點困難。」

不完全屬實。它暴露了一個已經存在的問題 - 保持所有組件的所有版本對齊。

您必須確保應用程序基礎架構作爲一個整體具有所有組件的正確版本。

通過正確標記每個部分,並提供一個配置報告,說明哪些版本是當前版本,哪些版本必須一起使用,使此更容易

2

通常版本信息是DLL的元數據(文件擴展信息)的一部分,而不是文件名的一部分。

維護過程比較容易。安裝程序知道如何在升級/替換現有二進制文件時使用該信息。如果您需要發佈DLL的新版本,則不需要重新編譯/重新鏈接您的exe。

作爲一般指導原則 - 不要嘗試發明新的機制。使用現有的。

相關問題