我创建了一个自定义属性并在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
答案 0 :(得分:1)
您必须使用Reflection来获取属性信息和值,并且每个属性都需要一个proc。
首先,您的示例属性类缺少关键项:如何返回信息。您需要添加属性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
是Property getter的名称。所以对于我添加的那个将是:
Return Attributes(0).GetBuild
与为类或枚举等获取Attr大致相同。另外:程序集已经有一个版本,您可以在项目属性设置中进行控制。并且System.Reflection
中已存在触发以返回它们。
修改强>
在运行时获取信息的方法:
Public Shared Function VersionPatch() As String
Return GetAsmBuild
End Function
或命名我的proc VersionPatch