Управление версиями AssemblyInfo игнорируется в ASP.NET MVC Web App? - PullRequest
7 голосов
/ 23 марта 2009

Странный здесь. Номер версии моего веб-приложения MVC печатается неправильно, в соответствии с тем, что установлено в 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 на нашем сервере разработки.

Есть идеи? Возможно, я использую неправильное утверждение для получения номера версии? : \

Спасибо, ребята.

1 Ответ

13 голосов
/ 23 марта 2009

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