1. 程式人生 > >C#版本號管理

C#版本號管理

最近在找C#的版本號問題,對於程式集版本和檔案版本的使用不理解,特記錄如下 :




關於釋出版本號管理 


標準版本號物理形式表示為用句點隔開的四段數字,如下面的程式碼示例所示。

<major version>.<minor version>.<build number>.<revision> 


實際使用中,我們一般只用到前面三段。即
<major version>.<minor version>.<build number>


而且會分外部版本號和內部版本號:
<Version>
    <InternalVer>2.2.2</InternalVer>
    <ExternalVer>1.1.0</ExternalVer>
</Version>


程式顯示的應該是外部版本號。
程式編譯前用當前的內部版本號更新 AssemblyVersion 屬性的 build number 段,非程式檔案(如資源等)在打包、備份、打標籤時統一使用內部版本號。




每個Assebmly包含三個Version 
AssemblyFileVersion :儲存在win32資源中, CLR不關心這個版本號, 
AssemblyInformationnalVersion :儲存在win32資源中, CLR不關心這個版本號,此版本號用來表示包含 
Assembly的產品的版本 
AssemblyVersion: 儲存在AssemblyDef manifest metadata table中,CLR會使用這個版本號 


工具的支援: 
CSC.exe和AL.exe在每次build時可以自動增加AssemblyVersion, 但要慎用.改變一個Assembly的 
AssemblyVersion會導致引用這個Assembly的其它Assembly無法工作. 


在VS會為每一個.net Porject生成 AssemblyInfo.cs 可在其中設定相關的資訊. 
[assembly: AssemblyVersion(”1.0.0.0″)] 
[assembly: AssemblyFileVersion(”1.0.1.0″)] 
如果使用[assembly: AssemblyVersion(”1.0.*”)], 在每次程式修改後build或rebuild後, assembly的 
AssemblyVersion的Build Number和 ReversionNumber和會自動增加.ReversionNumber每次都變, 
Build Number隨日期的變化而變化. 


有沒有什麼工具可以顯式地設定一個solution中所有的project的AssemblyVersion? 


通過程式獲得版本資訊: 
//== Get File Version 
System.Diagnostics.FileVersionInfo.GetVersionInfo 


//==Get Assembly Version 
AssemblyName assName = Assembly.GetExecutingAssembly().GetName(); 
string version = assName.Version.ToString(); 


對於一個win32的exe或dll,在Explore中檢視它的屬性(Properties->Version)可以看到 
File Version 
Product Version


一個.net Assembly在Explore中檢視它的屬性(Properties->Version)可以看到 
Assebly Version (對應 AssemblyVersion) 
File Version (對應 AssemblyFileVersion) 
Product Version (對應 AssemblyInformationnalVersion, 如果不指定,則和AssemblyFileVersion對應)