2013-12-23 65 views
1

讓我先說這個問題,說我對Assemblies的概念相當陌生。我正嘗試在名爲API的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返回測試程序集的版本號,但是這會返回API程序集版本。我在這裏做錯了什麼?

回答

2

根據MSDN,Assembly.GetExecutingAssembly

獲取包含當前正在執行的代碼的程序集。

它總是API程序集,因爲它是在定義和執行AppInfo.Version時的地方。

你想要的是獲取有關調用程序集的信息,即調用函數AppInfo.Version的程序集的信息。您可以通過類似的方法獲得它Assembly.GetCallingAssembly

返回調用當前正在執行的方法的方法的程序集。

注:在你的代碼Version呼籲VersionPatch等內部導致內部組件調用。 Version直接使用GetCallingAssembly會更好。

注2:仔細閱讀上面提供的GetCallingAssembly文檔中的方法inlinig與MethodImplOptions.NoInlining屬性裝飾你的Version方法,以避免內聯。

相關問題