从不同的应用程序返回汇编版本号

时间:2013-12-23 18:17:13

标签: vb.net api methods .net-assembly

让我先说这个问题,说我对大会的概念相当新。我正在尝试使用名为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程序集版本。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

根据MSDN,Assembly.GetExecutingAssembly

  

获取包含当前正在执行的代码的程序集。

并且它始终是API程序集,因为它是在定义和执行AppInfo.Version时的位置。

您想要的是获取有关调用程序集的信息,这意味着调用函数AppInfo.Version的程序集。您可以通过类似方法Assembly.GetCallingAssembly获取它:

  

返回调用当前正在执行的方法的方法的程序集。

注意:在您的代码Version内部调用VersionPatch等会导致内部程序集调用。 Version直接使用GetCallingAssembly会更好。

注2:请仔细阅读上面提供的GetCallingAssembly文档中的方法inlinig,并使用Version属性修饰MethodImplOptions.NoInlining方法以避免内联。