让我先说这个问题,说我对大会的概念相当新。我正在尝试使用名为API的命名空间创建方法。方法如下所示:
Partial Public Class AppInfo
' This function will return the VersionMajor Element of the Assembly Version
Function VersionMajor() As String
Dim txt As String = Assembly.GetExecutingAssembly.GetName.Version.Major.ToString()
If txt.Length > 0 Then
Return txt
Else
Return String.Empty
End If
End Function
' This function will return the VersionMinor Element of the Assembly Version
Function VersionMinor() As String
Dim txt As String = Assembly.GetExecutingAssembly.GetName.Version.Minor.ToString()
If txt.Length > 0 Then
Return txt
Else
Return String.Empty
End If
End Function
' This function will return the VersionPatch Element of the Assembly Version
Function VersionPatch() As String
Dim txt As String = Assembly.GetExecutingAssembly().GetName().Version.Build.ToString()
If txt.Length > 0 Then
Return txt
Else
Return String.Empty
End If
End Function
' This function will return the entire Version Number of the Assembly Version
Function Version() As String
Dim Func As New AppInfo
Dim txt As String = VersionMajor() + "." + VersionMinor() + "." + VersionPatch()
If txt.Length > 0 Then
Return txt
Else
Return String.Empty
End If
End Function
End Class
我在同一个解决方案中有其他项目,可以将API作为附加参考。我想要完成的是说我有一个项目引用了名为Test的API项目。在测试的家庭控制器中,我有一个调用Version方法的视图数据。像这样:
Function Index() As ActionResult
Dim func As New API.AppInfo
ViewData("1") = func.Version
Return View()
End Function
我希望viewdata返回Test程序集的版本号,但这会返回API程序集版本。我在这里做错了什么?
答案 0 :(得分:2)
根据MSDN,Assembly.GetExecutingAssembly
:
获取包含当前正在执行的代码的程序集。
并且它始终是API程序集,因为它是在定义和执行AppInfo.Version
时的位置。
您想要的是获取有关调用程序集的信息,这意味着调用函数AppInfo.Version
的程序集。您可以通过类似方法Assembly.GetCallingAssembly
获取它:
返回调用当前正在执行的方法的方法的程序集。
注意:在您的代码Version
内部调用VersionPatch
等会导致内部程序集调用。 Version
直接使用GetCallingAssembly
会更好。
注2:请仔细阅读上面提供的GetCallingAssembly
文档中的方法inlinig,并使用Version
属性修饰MethodImplOptions.NoInlining
方法以避免内联。