Представление (по умолчанию) по-прежнему в значительной степени компилируется по требованию, поэтому вы не можете надежно использовать 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 для компиляции представлений» здесь .
Возможно, ваше представление в любом случае не должно извлекать эти данные само по себе - их следует помещать в 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
{ ... }