C#版本號管理
阿新 • • 發佈:2018-11-27
最近在找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對應)