當我們設計一個組件時,除了類別的定義之外,還有一些額外的資訊是不包含在類別之中的,例如:版本編號,作者,公司資訊等等。 這些資訊統稱組件屬性,也就是前一節介紹的組件中繼資料。 欲編輯這些資訊可以在專案中開啟 AssemblyInfo 這個檔案,它就是用來儲存組件屬性的設定檔。(C#的檔案名稱為 AssemblyInfo.cs;VB的檔案名稱為 AssemblyInfo.vb)
在預設情況下,組件資訊檔會包含以下資訊:
[assembly: AssemblyCompany("")] [assembly: AssemblyCopyright("Copyright © 2012")] [assembly: AssemblyCulture("")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]
在前置詞 assembly 後面的關鍵字代表組件各個不同的屬性,例如:AssemblyCompany 表示公司資訊、AssemblyVersion 表示版本編號...。 這些屬性名稱都有一個組件的屬性類別跟它互相對應,用來存取組件的屬性。
叫用 Assembly.GetCustomAttributes 可以取得組件的屬性陣列。
//本例示範如何取得特定組件屬性 Assembly asm = Assembly.GetExecutingAssembly(); //取得AssemblyVersion屬性 object[] asmAttrs = asm.GetCustomAttributes(typeof(AssemblyVersionAttribute), false); if (asmAttrs.Length > 0) { AssemblyVersionAttribute ver = (AssemblyVersionAttribute)asmAttrs[0]; Console.WriteLine("AssemblyVersion : {0}", ver.Version); } //取得AssemblyDescription屬性 object[] versionAttrs = asm.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); if (versionAttrs.Length > 0) { AssemblyDescriptionAttribute desc = (AssemblyDescriptionAttribute)versionAttrs[0]; Console.WriteLine(desc.Description); }
//本例示範如何列舉組件的所有屬性 Assembly asm = Assembly.GetExecutingAssembly(); foreach (Attribute attr in asm.GetCustomAttributes(false)) { string AttrName = attr.GetType().Name; Console.WriteLine(AttrName); if (attr.GetType() == typeof(AssemblyVersionAttribute)) { Console.WriteLine("AssemblyVersion:{0}", ((AssemblyVersionAttribute)attr).Version); } else if (attr.GetType() == typeof(AssemblyDescriptionAttribute)) { Console.WriteLine("AssemblyDescription:{0}", ((AssemblyDescriptionAttribute)attr).Description); } //... }
上面例子中,使用 GetCustomAttributes (typeof(AssemblyVersionAttribute), false) 一直取不到 AssemblyVersion 屬性。 原來它不是 Custom Attribute ,沒有被加進組件中。 它與編譯相關,可以用自動產生的序號更新組件編號 (build number) 和修正編號 (revision)。 若要取得這些值,可以使用 Assembly.GetExecutingAssembly().GetName().Version. ToString() 取得。 另外也可以使用 AssemblyFileVersion 這個屬性來做版本判別,它就與編譯無關,屬於 Custom Attribute 屬性。
AssemblyVersionAttribute 由四組數字組成:
<major version>.<minor version>.<build number><revision>
- major version:主要版號。通常用於大改版。
- minor version:次要版號。通常用於小改版。
- build number:組件編號。通常用於區分哪一天建置的。
- revision:修訂編號
若將 AssemblyVersion 屬性設定為 (1.0.*) ,也就是以星號(asterisk)取式組件編號和修訂編號,則每次編譯時,系統會自動產生這二個編號。 其中 build number 是一個隨日期遞增的編號,(由 2000/01/01 開始算的天數)。而 revision 則是一個隨機產生的號碼。
若將 AssemblyVersion 屬性設定為 (1.0.3.*) ,則表示 build number 固定。而 revision 則隨機產生。
若將 AssemblyVersion 屬性設定為 (1.0.*.2) ,不允許這樣子的設定。
沒有留言:
張貼留言