Вызов пользовательских атрибутов сборки

Я создал собственный атрибут и использую его в файле 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 ответ

Решение

Вы должны использовать Reflection, чтобы получить информацию об атрибутах и ​​их значения, и вам понадобится один процесс для каждого атрибута.

Во-первых, в вашем примере класса 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 это имя получателя собственности. Так что для одного я добавил это было бы:

Return Attributes(0).GetBuild

Это примерно то же самое, что получение Attr для классов, перечислений и т. Д. Кроме того: сборки уже имеют версию, и вы можете управлять ею в настройках свойств проекта. А процы уже существуют в System.Reflection вернуть их.

Редактировать:

Способ получения информации во время выполнения:

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

или назови мой процесс VersionPatch

Другие вопросы по тегам