Visual Basic - Reflection, 反映教學筆記(3) 取得特定屬性

前一篇「Visual Basic - Reflection, 反映教學筆記(2) 基礎反映了解」我們學習取得 Assembly, Module 的資訊,這一篇我們來學習取得「取得Assembly特定屬性」。

其實我們開一個網站專案也好,或是主控台專案也好,開發工具會幫我們預設許多屬性,以我們主控台專案為例,我們先按「顯示所有檔案」,然後在「My Project」下可以找到一個 AssemblyInfo.vb 檔案,預設都是 Microsoft ...的內容,以下是我修改後的內容。

01Imports System.Resources
02 
03Imports System
04Imports System.Reflection
05Imports System.Runtime.InteropServices
06 
07' 組件的一般資訊是由下列的屬性集控制。
08' 變更這些屬性的值即可修改組件的相關
09' 資訊。
10 
11' 檢閱組件屬性的值
12 
13<Assembly: AssemblyTitle("AssemblyDemo")>
14<Assembly: AssemblyDescription("This is KKBruce Assembly Test and Study.")>
15<Assembly: AssemblyCompany("KKBruce")>
16<Assembly: AssemblyProduct("AssemblyDemo")>
17<Assembly: AssemblyCopyright("Copyright KKBruce 2011")>
18<Assembly: AssemblyTrademark("KKBruce")>
19<Assembly: AssemblyFlags(AssemblyNameFlags.EnableJITcompileOptimizer or Reflection.AssemblyNameFlags.EnableJITcompileTracking )>
20 
21<Assembly: ComVisible(False)>
22 
23'下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID
24<Assembly: Guid("e62bb460-650f-47f7-9b2f-e0aae99fccfb")>
25 
26' 組件的版本資訊是由下列四項值構成:
27'
28'      主要版本
29'      次要版本
30'      組建編號
31'      修訂編號
32'
33' 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號
34' 指定為預設值:
35' <Assembly: AssemblyVersion("1.0.*")>
36 
37<Assembly: AssemblyVersion("1.0.0.0")>
38<Assembly: AssemblyFileVersion("1.0.0.0")>
39 
40<assembly: NeutralResourcesLanguageAttribute("zh-TW")>

接下來,我們要透過 Reflection 來取得此 AssemblyInfo.vb 檔案內容裡的資訊。


顯示Assembly特定屬性

副程式ShowAttributeInfo():

01#Region "顯示Assembly特定屬性"
02#Region "Sample 3"
03    ''' <summary>
04    ''' 取得特定屬性
05    ''' </summary>
06    ''' <param name="asm">Assembly (組件)</param>
07    Sub ShowAttributeInfo(ByVal asm As Assembly)
08        ' 取得組件描述
09        Dim attrType As Type = GetType(AssemblyDescriptionAttribute)
10        ' 取得屬性陣列
11        Dim versionAttrs() As Object = asm.GetCustomAttributes(attrType, False)
12 
13        If versionAttrs.Length > 0 Then
14            ' 參考 My Project 下 AssemblyInfo.vb 檔案,對照 AssemblyDescription 屬性值
15            Dim desc As AssemblyDescriptionAttribute =
16                CType(versionAttrs(0), AssemblyDescriptionAttribute)
17            Console.WriteLine("Found Description!")
18            Console.WriteLine("Desc: {0}", desc.Description)
19        End If
20    End Sub
21#End Region
22#End Region

Module1 裡的主程式:

1Console.WriteLine("請參考 My Project\AssemblyInfo.vb 裡的<assembly: assemblydescription()="">屬性。")
2Dim c As Assembly = Assembly.GetExecutingAssembly()
3ShowAttributeInfo(c)
4</assembly:>

我們看一下 ShowAttributeInfo() 執行結果:

請參考 My Project\AssemblyInfo.vb 裡的屬性。
Found Description!
Desc: This is KKBruce Assembly Test and Study.

對照我們 AssemblyInfo.vb 檔案裡的 <Assembly: AssemblyDescription("This is KKBruce Assembly Test and Study.")> ,我們就能簡單取得 AssemblyInfo.vb 檔案裡的 AssemblyInfo 屬性資訊。其他屬性取得方式,MSDN 都有很好的範例,例如,AssemblyCompanyAttribute 類別 (找 Assembly*Attribute 類別),我就不再現醜了。

參考資料

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。