Calling Custom Assembly Attributes

◇◆丶佛笑我妖孽 提交于 2019-12-12 03:54:49

问题


I have created a custom attribute and use it in the AssemblyInfo.vb file. The attribute is declared in another file like so:

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

And is in the AssemblyInfo.vb file like so:

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

How can I call this custom attribute?? I would like to be able to call it just like I call the version information like so:

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

回答1:


You have to use Reflection to get attribute information and value, and you will need one proc for each attribute.

First though, your sample Attribute class is missing a key item: HOW TO RETURN the info. You need to add a property getter:

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

NOW you are ready

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 is the name of the Property getter. So for the one I added it would be:

Return Attributes(0).GetBuild

It is about the same as getting Attr for Classes or Enums etc. Also: Assemblies already have a version and such you can control in the Project properties settings. And procs already exist in System.Reflection to return them.

Edit:

The way to get the info at runtime:

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

or name my proc VersionPatch



来源:https://stackoverflow.com/questions/19127737/calling-custom-assembly-attributes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!