如何使用 VB.NET 应用程序动态获取 AssemblyCustomAttribute 的值?
How to dynamically get the value of an AssemblyCustomAttribute with a VB.NET application?
我想创建一个辅助函数,它采用 AssemblyCustomAttribute 类型,return将 属性 值作为字符串。
函数代码如下:
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 的主要 属性 和 return 识别为字符串,同时 option strict 处于开启状态(没有后期绑定)?
上面的代码有一个缺陷,它目前只支持 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
我想创建一个辅助函数,它采用 AssemblyCustomAttribute 类型,return将 属性 值作为字符串。
函数代码如下:
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 的主要 属性 和 return 识别为字符串,同时 option strict 处于开启状态(没有后期绑定)?
上面的代码有一个缺陷,它目前只支持 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