奇怪的是这里.根据设置的内容,我的MVC Web应用程序的版本号无法正确打印到我的视图中AssemblyInfo.cs
.我在集合中设置的定义AssemblyInfo.cs
是' 1.0.232.0
'.
我尝试了多种方法来打印它:
<%= System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()%>
(结果0.0.0.0)
<%= System.Reflection.Assembly.GetCallingAssembly().GetName().Version.ToString()%>
(结果是2.0.0.0,在我的项目中没有设置.)
<%= typeof(HomeController).GetType().Assembly.GetName().Version.ToString()%>
(结果2.0.0.0)
这让我相信它一定不能拿起我的AssemblyInfo.cs文件?如果我尝试使用"发布"按钮在我们的开发服务器上发布到IIS,情况也是如此.
有任何想法吗?也许我使用错误的语句来获取版本号?:\
多谢你们.
该视图(默认情况下)仍然主要按需编译,因此您无法GetExecutingAssembly()
在视图中可靠地使用- 但是,对我来说,控制器使用情况正常:
[assembly: AssemblyVersion("1.2.3.4")]
有:
<%=typeof(MvcApplication4.Controllers.HomeController).Assembly .GetName().Version.ToString() %>
节目
编辑
你犯的错误是调用typeof(...).GetType()
- 这会给你Type
(或子类) - 所以是的,它将是2.x.
/编辑
有关预编译视图的额外步骤,请参阅此处的 "用于编译视图的MSBuild任务" .
可以说,您的视图无论如何都不应该自己获取这些数据 - 它应该放在ViewData(或类似的)中,可能是由基本控制器或动作过滤器.
关于母版页的问题; 首先,选择一个键;-p
<%=ViewData["AppVersion"] %>
然后有两个选项跳出来:OnActionExecuting
控制器中的覆盖(或公共基本控制器):
protected override void OnActionExecuting( ActionExecutingContext filterContext) { filterContext.Controller.ViewData["AppVersion"] = GetType().Assembly.GetName() .Version.ToString(); // probably cached base.OnActionExecuting(filterContext); }
或创建一个动作过滤器:
public class AppVersionAttribute : ActionFilterAttribute { public override void OnActionExecuting( ActionExecutingContext filterContext) { filterContext.Controller.ViewData["AppVersion"] = GetType().Assembly.GetName() .Version.ToString(); // probably cached base.OnActionExecuting(filterContext); } }
并使用此属性标记您的控制器(类)或操作(方法):
[HandleError, AppVersion] public class HomeController : Controller { ... }