摘要:Visual C# 2005 - 如何利用程式碼動態存取組件資訊
一般來說,如果是 Visual Basic 2005 的使用者,會利用 Microsoft.VisualBasic.ApplicationServices 命名空間中之AssemblyInfo 類別的 AssemblyName、CompanyName、CopyRight、Description、Trademark 以及 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"
);