asp.net-mvc – 无法获取脚本的程序集版本

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 无法获取脚本的程序集版本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 this question中提到的自动生成版本(不是选择的答案,而是使用[assembly:AssemblyVersion(“1.0。*”)]技术的答案。我这样做在我的Site.Master文件在MVC 2的脚注。我的代码为这样做如下:
<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引用未设置为对象的实例,因为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临时文件文件夹下的临时程序集。这是一个对“生成”类的引用。

Assembly.GetExecutingAssembly()基本上与Assembly.GetAssembly(this.GetType())相同(除了它也适用于没有“this”(例如在静态方法)。

最好的方法是使用显式性,使用你知道存在于你之后的程序集中的类型。例如,我假设你的“Site.Master”有一个代码隐藏文件,编译到程序集中。您可以改用:

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

(假设类的名称是Site)

猜你在找的asp.Net相关文章