默认情况下,视图仍然大部分是按需编译的,因此您不能可靠地在视图中使用GetExecutingAssembly()
,但是对我来说控制器用法可以正常工作:
[assembly: AssemblyVersion("1.2.3.4")]
使用:
<h2><%=typeof(MvcApplication4.Controllers.HomeController).Assembly
.GetName().Version.ToString() %></h2>
在页面中显示
1.2.3.4
。
编辑
您犯的错误是调用typeof(...).GetType()
- 这将给出Type
(或子类)- 因此,是2.x。
/编辑
有关预编译视图的额外步骤,请参见“MSBuild任务编译视图”here。
可以说,你的视图本身不应该获取这些数据 - 应该将其放入ViewData(或类似的地方),也许由基本控制器或操作筛选器来完成。
关于主页面的问题;首先,选择一个关键字 ;-p
<%=ViewData["AppVersion"] %>
那么就有两个选择:在控制器(或公共基础控制器)中覆盖OnActionExecuting
:
protected override void OnActionExecuting(
ActionExecutingContext filterContext)
{
filterContext.Controller.ViewData["AppVersion"] =
GetType().Assembly.GetName()
.Version.ToString();
base.OnActionExecuting(filterContext);
}
或者创建一个操作筛选器:
public class AppVersionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(
ActionExecutingContext filterContext)
{
filterContext.Controller.ViewData["AppVersion"] =
GetType().Assembly.GetName()
.Version.ToString();
base.OnActionExecuting(filterContext);
}
}
使用这个属性标记你的控制器(类)或操作(方法):
[HandleError, AppVersion]
public class HomeController : Controller
{ ... }