你已經觸及了一個非常大的話題,這確實可以得到複雜,因爲你將允許它。
最終,您選擇的版本控制方法將取決於您需要實現的內容以及您需要分配多少時間來維護它。這兩者直接相關。
版本控制的兩個主要目標是並行執行和跟蹤。並行(SxS)允許同一個DLL的多個版本在相同的應用程序中執行。如果不改變彙編版本號,這是不可能的。 跟蹤只是能夠確定客戶機器上運行的確切代碼快照。 兩者都可以通過改變彙編版本來實現,但是第一個可以通過改變彙編版本來實現只有。
許多人會推薦您在所有DLL/EXE中共享版本號 - 這是一個很好的方法,因爲它是最簡單的方法,它也實現了最小的部署靈活性。例如,如果您使用任何形式的合同抽象(通過接口而不是具體類型定義DLL之間的依賴關係),則可以將應用程序劃分爲多個「版本控制筒倉」。 一個例子是客戶端和服務器,在第三個程序集中定義的相互依存關係,您的WCF合同。 如果它們都是單獨版本,那麼你可以釋放一個新版本的服務器(只要它符合同一個合同),而不影響客戶端。反之亦然。正如你所看到的,隨着需求的增長,你將增加你的版本粒度,但它會遭到偷聽。
您可以做的最好的事情就是您正在做的事,坐下來計劃您的需求,然後繪製出您的版本邊界(哪些組件可以通過合同分開)。
接下來的事情取決於測試部門的大小,但我也建議您考慮讓文件版本反映(至少部分)內部版本號/日期。 對於每個客戶發佈版本,您只會增加一次程序集版本,但對於每個來自版本的DLL集合,您應該擁有不同的文件版本。這是因爲當你測試時,並且你找到一個問題時,讓這些DLL唯一標識將消除對DLL源自哪個構建的任何懷疑。
這取決於DLL是否是應用程序的一個組成部分,或者依賴於它們自己的項目。我目前正在研究具有可用於其他項目的庫DLL的應用程序。庫DLL有它自己的彙編信息,我們不保證其版本號將與其使用的每個其他項目的版本號相匹配。 –
@羅伯特哈維,是的 - 當然。如果dll不是應用程序的組成部分,那麼您不能使用共享的assemblyinfo。但在這個特定的問題,似乎該DLL是應用程序的一部分。 – Illuminati