Visual C# 2005 - 如何利用程式碼動態存取組件資訊

摘要:Visual C# 2005 - 如何利用程式碼動態存取組件資訊

一般來說,如果是 Visual Basic 2005 的使用者,會利用 Microsoft.VisualBasic.ApplicationServices 命名空間中之AssemblyInfo 類別的 AssemblyNameCompanyNameCopyRightDescriptionTrademark 以及 Version 等屬性,來取得組件不包括副檔名的檔案名稱、公司名稱、著作權注意事項、描述內容、商標註意事項以及版本號碼。Visual C# 當然也可以使用該類別來取得組件資訊,但是有沒有其他的方法也可以存取組件資訊呢?答案當然是肯定的。 

程式範例 

圖表1 

如圖表 1 所示,程式專案會將組件資訊儲存在專案的 Properties 資料夾內之 AssemblyInfo.cs 檔案裡。一般來說,編輯組件資訊檔案內容最簡便的方式就是透過 Visual Studio 整合式開發環境,在專案屬性之應用程式頁籤裡,可以找到「組件資訊」的按鈕,按下按鈕就會出現對話方塊讓使用者編輯組件資訊,如圖表 2 所示。

 

 


圖表
2
 

 


圖表
3
 

事實上,透過自訂類別的方式,存取組件資訊變的相當容易。圖表 3 Blog_DemoForm001.cs 程式範例的執行畫面,使用者按下按鈕之後,畫面會出現顯示組件資訊的訊息方塊,茲將自訂類別之程式碼列示如下: 

#region "組件屬性存取類別" 

public class AssemblyInfoClass

{

private Type myType; 

public AssemblyInfoClass()

{

myType = typeof(Blog_DemoForm001);

} 

public string AsmName

{

get

{

return myType.Assembly.GetName().Name.ToString();

}

} 

public string AsmFQName

{

get

{

return myType.Assembly.GetName().FullName.ToString();

}

} 

public string CodeBase

{

get

{

return myType.Assembly.CodeBase;

}

} 

public string Copyright

{

get

{

Type at = typeof(AssemblyCopyrightAttribute);

object[] r = myType.Assembly.GetCustomAttributes(at, false);

AssemblyCopyrightAttribute ct =
(AssemblyCopyrightAttribute)(r[0]);

  

return ct.Copyright;

}

} 

public string Company

{

get

{

Type at = typeof(AssemblyCompanyAttribute);

object[] r = myType.Assembly.GetCustomAttributes(at, false);

AssemblyCompanyAttribute ct =
(AssemblyCompanyAttribute)(r[0]);

  

return ct.Company;

}

} 

public string Description

{

get

{

Type at = typeof(AssemblyDescriptionAttribute);

object[] r = myType.Assembly.GetCustomAttributes(at, false);

AssemblyDescriptionAttribute da =
(AssemblyDescriptionAttribute)(r[0]);

  

return da.Description;

}

} 

public string Product

{

get

{

Type at = typeof(AssemblyProductAttribute);

object[] r = myType.Assembly.GetCustomAttributes(at, false);

AssemblyProductAttribute pt =
(AssemblyProductAttribute)(r[0]);
  

return pt.Product;

}

} 

public string Title

{

get

{

Type at = typeof(AssemblyTitleAttribute);

object[] r = myType.Assembly.GetCustomAttributes(at, false);

AssemblyTitleAttribute ta = (AssemblyTitleAttribute)(r[0]);  

return ta.Title;

}

} 

public string Version

{

get

{

return myType.Assembly.GetName().Version.ToString();

}

}

} 

#endregion 

最後,在 button1 Click 事件處理常式撰寫如下所示之程式碼,建立 AssemblyInfoClass 類別執行個體,顯示組件資訊: 

AssemblyInfoClass myAssembly = new AssemblyInfoClass(); 

MessageBox.Show(

"myAssembly.AsmFQName" + myAssembly.AsmFQName + "n" +

"myAssembly.AsmName" + myAssembly.AsmName + "n" +

"myAssembly.CodeBase" + myAssembly.CodeBase + "n" +

"myAssembly.Company" + myAssembly.Company + "n" +

"myAssembly.Copyright" + myAssembly.Copyright + "n" +

"myAssembly.Description" + myAssembly.Description + "n" +

"myAssembly.Product" + myAssembly.Product + "n" +

"myAssembly.Title" + myAssembly.Title + "n" +

"myAssembly.Version" + myAssembly.Version + "n"

);