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