Asp.net-Mvc

無法獲取頁腳的程序集版本

  • May 12, 2010

我正在使用這個問題中提到的自動建構版本控制(不是選擇的答案,而是使用該[assembly: AssemblyVersion("1.0.*")]技術的答案)。我在 MVC 2 的 Site.Master 文件的頁腳中執行此操作。我執行此操作的程式碼如下:

<div id="footer">
   <a href="emailto:webmaster@foo.com">webmaster@foo.com</a> - Copyright © 2005-<%= DateTime.Today.Year.ToString() %>, foo LLC. All Rights Reserved.
   - Version: <%= Assembly.GetEntryAssembly().GetName().Version.ToString() %>
</div>

我得到的例外是Object reference not set to an instance of an object因為GetEntryAssembly()返回NULL。我的其他選擇也不起作用。GetCallingAssembly()總是返回“4.0.0.0”並且GetExecutingAssembly()總是返回“0.0.0.0”。當我查看我的 DLL 時,一切都是我所期望的版本控制。但我不知道如何訪問它以顯示在我的頁腳中!

這是因為Assembly.GetEntryAssembly()返回 null:在 ASP.NET 站點中沒有“入口”程序集(因為 .NET 框架託管在 w3wp.exe 程序中)。Assembly.GetEntryAssembly()用於獲取您從中啟動的 .exe 程序集(通常在控制台或 Windows 應用程序中)

原因Assembly.GetAssembly(this.GetType())是返回版本為“0.0.0.0”的程序集是因為 ASP.NET 將您的 Site.Master 文件編譯為“ASP.NET 臨時文件”文件夾下的臨時程序集。this是對“生成”類的引用。

Assembly.GetExecutingAssembly()基本相同(除了它在Assembly.GetAssembly(this.GetType())沒有“this”時也可以工作(例如在靜態方法中)。

最好的方法是明確地使用您知道存在於您所追求的程序集中的類型。例如,我假設您的“Site.Master”有一個編譯到程序集中的程式碼隱藏文件。您可以改用它:

Assembly.GetAssembly(typeof(Site)).GetName().Version.ToString()

(假設類的名稱是Site

引用自:https://stackoverflow.com/questions/2815324