0

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

1 回答 1

1

您必须使用反射来获取属性信息和值,并且每个属性都需要一个 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是属性 getter 的名称。因此,对于我添加的那个,它将是:

Return Attributes(0).GetBuild

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

编辑:

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

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

或命名我的过程VersionPatch

于 2013-10-02T00:56:22.947 回答