簡體   English   中英

匯編命名和版本控制的最佳實踐?

[英]Best practices for assembly naming and versioning?

我正在尋找關於命名程序集和版本化它們的一些好方法。 您多久遞增一次主要版本或次要版本?

在某些情況下,我看到版本從1.0版本直接發布到3.0版本。 在其他情況下,它似乎停留在版本1.0.2.xxxx。

這將用於整個公司的多個項目中使用的共享程序集。 期待一些良好的投入。

從一些好的信息, 這篇文章在蘇珊·庫克在MSDN(轉貼2003-05-30)博客:

何時更改文件/程序集版本

首先,文件版本和匯編版本不需要相互重合。 我建議每個版本都會更改文件版本。 但是,不要只為每個構建更改程序集版本,以便您可以區分同一文件的兩個版本; 使用文件版本。 決定何時更改程序集版本需要考慮要考慮的構建類型:運輸和非運輸。

非運輸建設
通常,我建議在運輸版本之間保持非運輸組件版本相同。 這避免了由於版本不匹配而導致強烈命名的程序集加載問題。 有些人更喜歡使用發布者策略來重定向每個構建的新程序集版本。 但是,對於非運輸版本,我建議不要這樣做:它不能避免所有加載問題。 例如,如果合作伙伴對您的應用進行x復制,則他們可能不知道安裝發布商政策。 然后,即使它在您的計算機上運行正常,您的應用也會被破壞。

但是,如果在同一台機器上的不同應用程序需要綁定到程序集的不同版本的情況下,我建議為這些構建版本提供不同的程序集版本,以便可以使用每個應用程序的正確應用程序,而無需使用LoadFrom / etc.

運輸建設
至於為運輸版本更改該版本是否是一個好主意,它取決於您希望綁定如何為最終用戶工作。 您是否希望這些版本並排或就地? 這兩個版本之間有很多變化嗎? 他們打算打破一些客戶嗎? 你是否擔心它會破壞它們(或者你是否想強迫用戶使用你的重要更新)? 如果是,則應考慮增加程序集版本。 但是,再一次,考慮到這樣做太多次可能會使用過時的程序集丟棄用戶的磁盤。

更改裝配版本時
要將硬編碼版本更改為新版本,我建議將變量設置為頭文件中的版本,並將源代碼中的硬編碼替換為變量。 然后,在構建期間運行預處理器以輸入正確的版本。 我建議在發貨后立即更換版本,而不是之前,以便有更多時間來捕獲由於更改而導致的錯誤。

定義版本控制的一種方法是為每個部分賦予語義含義:

  • 兼容性與新版本相關時,從Nx轉到N + 1.0
  • 當添加新功能但不破壞兼容性時,從NM到N.M + 1
  • 添加錯誤修復后,從NMX轉到NMX + 1

以上僅是一個示例 - 您需要定義對您有意義的規則。 但是,用戶通過查看版本快速判斷是否存在不兼容性是非常好的。

哦,不要忘記發布你提出的規則,以便人們知道會發生什么。

語義版本控制有一套關於如何應用它(以及何時)的指南和規則。 非常簡單,它只是工作。

http://semver.org/

我建議的第一件事是熟悉Assembly版本和File版本之間的差異。 不幸的是,當涉及到AssemblyInfo文件時,.NET傾向於將它們視為相同,因為它通常只放置AssemblyVersion並允許FileVersion默認為相同的值。

既然你說這是一個共享程序集,我假設你的意思是它是在二進制級別共享的(不是通過在各種解決方案中包含項目)。 如果是這種情況,您希望非常謹慎地更改程序集版本,因為這是.NET用來強制命名程序集(允許您將其置於GAC中)並且還構成“程序集全名”。 當程序集版本更改時,它可以對使用它的應用程序進行重大更改,而無需在app.config文件中添加程序集重定向條目。

至於命名,我認為這取決於您公司的命名規則(如果有的話)和庫的目的。 例如,如果此庫提供的“核心”(或系統級)功能並非特定於任何特定產品或業務線,則可將其命名為:

CompanyName.Framework.Core 

如果它是一個更大的圖書館的一部分,或簡單地說

CompanyName.Shared
CompanyName.Core
CompanyName.Framework

至於何時增加版本號,它仍然是相當主觀的,取決於你認為構建號的每個部分代表什么。 默認的Microsoft方案是Major.Minor.Build.Revision,但這並不意味着您無法提出自己的定義。 最重要的是保持策略的一致性,並確保定義和規則對所有產品都有意義。

幾乎在每個版本方案中,我都看到前兩個部分是Major.Minor。 主要版本號通常在有大的更改和/或中斷更改時遞增,而次要版本號通常遞增以指示更改的內容不是一個重大更改。 其他兩個數字更加主觀,可以是“構建”(通常是連續日期值或每天更改的順序更新數字)和“修訂版”或補丁號。 我也看到它們顛倒了(給Major.Minor.Revision.Build),其中build是自動構建系統中的順序遞增數字。

請記住,在導出程序集時,程序集主要版本和次要版本將用作類型庫版本號。

最后,請查看其中一些資源以獲取更多信息:

http://msdn.microsoft.com/en-us/library/51ket42z.aspx

http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx

http://blogs.msdn.com/suzcook/archive/2003/05/29/57148.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM