網頁

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

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

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

Imports System.Resources

Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

' 組件的一般資訊是由下列的屬性集控制。
' 變更這些屬性的值即可修改組件的相關
' 資訊。

' 檢閱組件屬性的值

<Assembly: AssemblyTitle("AssemblyDemo")> 
<Assembly: AssemblyDescription("This is KKBruce Assembly Test and Study.")> 
<Assembly: AssemblyCompany("KKBruce")> 
<Assembly: AssemblyProduct("AssemblyDemo")> 
<Assembly: AssemblyCopyright("Copyright KKBruce 2011")> 
<Assembly: AssemblyTrademark("KKBruce")> 
<Assembly: AssemblyFlags(AssemblyNameFlags.EnableJITcompileOptimizer or Reflection.AssemblyNameFlags.EnableJITcompileTracking )>

<Assembly: ComVisible(False)>

'下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID
<Assembly: Guid("e62bb460-650f-47f7-9b2f-e0aae99fccfb")> 

' 組件的版本資訊是由下列四項值構成:
'
'      主要版本
'      次要版本
'      組建編號
'      修訂編號
'
' 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號
' 指定為預設值:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 

<assembly: NeutralResourcesLanguageAttribute("zh-TW")>

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


顯示Assembly特定屬性

副程式ShowAttributeInfo():

#Region "顯示Assembly特定屬性"
#Region "Sample 3"
    ''' <summary>
    ''' 取得特定屬性
    ''' </summary>
    ''' <param name="asm">Assembly (組件)</param>
    Sub ShowAttributeInfo(ByVal asm As Assembly)
        ' 取得組件描述
        Dim attrType As Type = GetType(AssemblyDescriptionAttribute)
        ' 取得屬性陣列
        Dim versionAttrs() As Object = asm.GetCustomAttributes(attrType, False)

        If versionAttrs.Length > 0 Then
            ' 參考 My Project 下 AssemblyInfo.vb 檔案,對照 AssemblyDescription 屬性值
            Dim desc As AssemblyDescriptionAttribute =
                CType(versionAttrs(0), AssemblyDescriptionAttribute)
            Console.WriteLine("Found Description!")
            Console.WriteLine("Desc: {0}", desc.Description)
        End If
    End Sub
#End Region
#End Region

Module1 裡的主程式:

Console.WriteLine("請參考 My Project\AssemblyInfo.vb 裡的屬性。")
Dim c As Assembly = Assembly.GetExecutingAssembly()
ShowAttributeInfo(c)

我們看一下 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 類別),我就不再現醜了。

參考資料

沒有留言:

張貼留言

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