簡體   English   中英

調用自定義程序集屬性

[英]Calling Custom Assembly Attributes

我創建了一個自定義屬性,並在AssemblyInfo.vb文件中使用它。 該屬性在另一個文件中聲明,如下所示:

Public NotInheritable Class AssemblyBuildNameAttribute
    Inherits Attribute

    Private _p1 As String

    Sub New(p1 As String)
        ' TODO: Complete member initialization 
        _p1 = p1
    End Sub

End Class

並位於AssemblyInfo.vb文件中,如下所示:

<Assembly: AssemblyVersion("0.4.15")> 
<Assembly: AssemblyFileVersion("13.10.1.8")> 
<Assembly: AssemblyBuildName("alpha")>

我怎么稱呼這個自定義屬性? 我希望能夠像調用版本信息一樣調用它:

Public Class AppInfo
  Public Shared Function VersionMajor() As String
    Return Assembly.GetExecutingAssembly().GetName().Version.Major.ToString()
  End Function
  Public Shared Function VersionMinor() As String
    Return Assembly.GetExecutingAssembly().GetName().Version.Minor.ToString()
  End Function
  Public Shared Function VersionPatch() As String
    Return Assembly.GetExecutingAssembly().GetName().Version.Build.ToString()
  End Function
End Class

您必須使用Reflection來獲取屬性信息和值,並且每個屬性都需要一個proc。

不過,首先,您的示例Attribute類缺少一個關鍵項:如何返回信息。 您需要添加一個屬性獲取器:

Friend ReadOnly GetBuild() As String
   Get
      Return _p1
   End Get
End Property

現在你准備好了

Friend Function GetAsmBuild() As String
    Dim assy As [Assembly] = [Assembly].GetExecutingAssembly
    Dim Attributes As Object()


    Attributes = assy.GetCustomAttributes(GetType(AssemblyBuildNameAttribute), False)
    If Attributes.Length > 0 Then
        Return Attributes(0).GetBuild
    Else
       Return String.Empty
    End If

 End Function

GetVersion是屬性獲取器的名稱。 因此,對於我添加的那是:

Return Attributes(0).GetBuild

它與獲取類或枚舉等的Attr大約相同。另外:程序集已有版本,您可以在Project屬性設置中進行控制。 並且procs已經存在於System.Reflection以返回它們。

編輯:

在運行時獲取信息的方法:

Public Shared Function VersionPatch() As String
    Return GetAsmBuild
 End Function

或命名我的proc VersionPatch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM