作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用this question中提到的自动构建版本控制(不是选定的答案,而是使用[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站点中没有“entry”程序集(因为.NET框架托管在w3wp.exe进程中)。 Assembly.GetEntryAssembly()
用于获取从中启动的.exe程序集(通常在控制台或Windows应用程序中)Assembly.GetAssembly(this.GetType())
返回版本为“0.0.0.0”的程序集的原因是因为ASP.NET将您的Site.Master文件编译为“ASP.NET临时文件”文件夹下的临时程序集。 this
是对“generated”类的引用。Assembly.GetExecutingAssembly()
与Assembly.GetAssembly(this.GetType())
基本相同(除了在没有“this”(例如,在静态方法中)时也可以使用)。
最好的方法是使用显式使用您知道的程序集中存在的类型。例如,假设您的“Site.Master”具有一个代码隐藏文件,该文件已编译到程序集中。您可以改用:
Assembly.GetAssembly(typeof(Site)).GetName().Version.ToString()
Site
)
关于asp.net-mvc - 无法获取页脚的程序集版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2815324/
我是一名优秀的程序员,十分优秀!