调用自定义程序集属性

时间:2013-10-01 23:34:55

标签: vb.net .net-assembly getcustomattributes

我创建了一个自定义属性并在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

1 个答案:

答案 0 :(得分:1)

您必须使用Reflection来获取属性信息和值,并且每个属性都需要一个proc。

首先,您的示例属性类缺少关键项:如何返回信息。您需要添加属性getter:

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是Property getter的名称。所以对于我添加的那个将是:

Return Attributes(0).GetBuild

与为类或枚举等获取Attr大致相同。另外:程序集已经有一个版本,您可以在项目属性设置中进行控制。并且System.Reflection中已存在触发以返回它们。

修改

在运行时获取信息的方法:

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

或命名我的proc VersionPatch