Я хочу создать вспомогательную функцию, которая принимает тип AssemblyCustomAttribute и возвращает значение свойства в виде строки.
Вот код функции:
Public Shared Function GetAssemblyAttribute(tAttribute As Type, Optional bFirstResult As Boolean = True) As String
Dim sRetVal As String = String.Empty
Dim objAssembly As Assembly = Assembly.GetExecutingAssembly()
Dim objAttributes As Object() = objAssembly.GetCustomAttributes(True)
For Each objAttribute In objAttributes
If objAttribute.GetType().Equals(tAttribute) Then
sRetVal = objAttribute.Configuration
If bFirstResult Then
Exit For
End If
End If
Next
Return sRetVal
End Function
Есть ли возможность определить основное свойство AssemblyCustomAttribute и вернуть его в виде строки, а опция строгая включена (без поздних привязок)?
В приведенном выше коде есть недостаток, заключающийся в том, что в настоящее время он поддерживает только AssemblyConfigurationAttribute.
Вторая проблема заключается в том, что он должен работать с .NET Framework 2.0. Вот почему нет вызова OfType<>, потому что он не существует с 2.0.
Для справки хочу получить следующие атрибуты от AssemblyInfo.vb
<Assembly: AssemblyConfiguration("Debug")>
<Assembly: AssemblyInformationalVersion("1.0.0")>
со следующими вызовами функций:
Me.lblAppVersion.Text = String.Format(
"Version {0} ({1})",
Helper.GetAssemblyAttribute((New System.Reflection.AssemblyConfigurationAttribute("")).GetType()),
Helper.GetAssemblyAttribute((New System.Reflection.AssemblyInformationalVersionAttribute("")).GetType())
)
' Returns: "Version 1.0.0 (Debug)"
Как изменить функцию, чтобы она автоматически определяла первичная собственность, или использовать предоставленный строковый параметр в качестве имени свойства?





Я нашел быстрое и грязное решение. Однако я хотел бы увидеть любое другое возможное лучшее решение.
Public Shared Function GetAssemblyAttribute(tAttribute As Type, Optional bFirstResult As Boolean = True) As String
Dim sRetVal As String = String.Empty
Dim objAssembly As Assembly = Assembly.GetExecutingAssembly()
Dim objAttributes As Object() = objAssembly.GetCustomAttributes(True)
For Each objAttribute In objAttributes
If objAttribute.GetType().Equals(tAttribute) Then
For Each objProperty In objAttribute.GetType().GetProperties()
If objProperty.Name <> "TypeId" Then
sRetVal = objProperty.GetValue(objAttribute, Nothing)
If bFirstResult Then
Exit For
End If
End If
Next
End If
Next
Return sRetVal
End Function