代码之家  ›  专栏  ›  技术社区  ›  aaronmallen

调用自定义程序集属性

  •  0
  • aaronmallen  · 技术社区  · 12 年前

    我已经创建了一个自定义属性,并在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 回复  |  直到 12 年前
        1
  •  1
  •   Community Mohan Dere    6 年前

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

    不过,首先,您的示例Attribute类缺少一个关键项:如何返回信息。您需要添加一个属性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 是属性getter的名称。因此,对于我添加的一个,它将是:

    Return Attributes(0).GetBuild
    

    这与获取类或枚举等的属性差不多。此外:程序集已经有了一个版本,因此您可以在项目财产设置中进行控制。并且proc已经存在于 System.Reflection 返回。

    编辑:

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

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

    或者命名我的进程 VersionPatch