簡體   English   中英

使用程序集版本控制屬性的最佳方法是什么?

[英]What is the best way to use assembly versioning attributes?

AssemblyVersionAssemblyFileVersion屬性是處理.NET程序集的版本號的內置方法。 雖然該框架提供了自動確定版本號最低有效部分(以Microsoft術語為內部版本和修訂版)的能力,但我發現解決此問題的方法相當薄弱,並且無疑還有很多其他方法。

所以我想問,已經確定了哪些方法可以最好地完成版本號,以更好地反映項目的實際版本? 您是否有一個預構建腳本,可將部分版本設置為日期和時間,或者將項目的工作副本的存儲庫版本設置為? 您是否僅使用框架提供的自動生成? 或者是其他東西? 管理程序集/文件版本控制的最佳方法是什么?

我在這里看到許多有關使用Subversion修訂號作為程序集版本的組件的文章。 注意:Windows(abcd)中可用的4個版本號每個都限制為16位(最大= 65535)。 Subversion修訂版號很容易超過此限制,尤其是在同一資源庫中托管多個項目時。

在我當前的項目中,我們使用Subversion版本號作為版本號的最低有效部分(內部版本),並使用Nant腳本創建項目AssemblyInfo文件。 我們對AssemblyVersion和AssemblyFileVersion屬性使用相同的版本號。 (其他三個部分是major.minor.point,其中每次數據庫模式更改時major.minor都會遞增,並且每個發行版的point都會遞增。)

我們從簡單增加內部版本號開始,但這要求每次構建都檢入版本文件,並在合並時引起沖突。 當證明不可行時,我們開始使用CruiseControl.NET生成內部版本號,但這使手動復制特定內部版本變得困難。 最終,我們采用了當前的(Subversion-revision)方案。

注意:不幸的是,使用.NET時,不可能從以前的版本中完美地重新創建內部版本,因​​為.NET編譯器在編譯時會將當前時間戳編碼到目標文件中。 每次編譯相同的代碼時,都會得到一個不同的目標文件。

在上一個使用Subversion的工作中,我運行了一個關於ccnet的nant腳本來提取存儲庫版本並將其用作最終版本。

在這項工作中,我們使用VSS(快門),因此這並不是一個真正的選擇,因此我們有一個手動更新它的策略,並遵循以下准則:

  • 重大:功能(或介面)發生重大變更(> 25%)。
  • 次要的:在功能或界面上進行小的更改或添加。
  • 構建:細微的更改會破壞界面。
  • 修訂:修復了不更改界面的內部版本。

我們還使Assembly和File版本保持同步。 程序集版本可以很容易地以編程方式讀取,而文件版本可以在Windows資源管理器中的“詳細信息”模式下顯示為一列。

我們的構建腳本將TFS的變更集編號注入到版本中。 這樣,我們就可以確切地知道構建中包含哪些簽入。

我們將CruiseControl.NET構建服務器將perforce更改列表號嵌入到AssemblyFileVersion -這使我們可以追溯到由構建服務器構建的任何程序集的源代碼。 (我們總是從主分支開始構建。)

對於客戶將要引用的程序集,除非存在重大更改,否則我們將AssemblyVersion保持不變,在這種情況下,我們將增加版本以確保針對新版本重建客戶代碼。

我們使用來自Subversion的版本控制,並讓構建腳本更新程序集版本信息,因此源檢入控制版本控制。

我們傾向於將發布(或構建)日期嵌入到程序集中。 例如,如果今天構建,該版本將為“ 2008.10.06”(構建腳本對其進行更新)。

AssemblyVersionAttribute是程序集標識的一部分。 進行更改意味着這是一個不同的程序集,鏈接到該程序集的程序需要重新編譯/鏈接或需要應用版本策略。 我們沒有發現終止現象,因此我們選擇僅為每個修補程序增加AssemblyFileVersion,而僅為每個主要版本更改AssemblyVersion。 我們知道,這一決定使Win32 dll陷入了困境。 我們為每個構建增加AssemblyFileVersion,並用該版本標記/標記版本控制系統,以便我們知道二進制文件來自何處。

暫無
暫無

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

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