Номер версии для печати в приложении ASP.NET MVC 4

У меня есть приложение ASP.NET MVC 4. В настоящее время я устанавливаю версию приложения в свойствах проекта на вкладке "Приложение". Отсюда я нажимаю кнопку "Информация о сборке...". После этого я ввел "1 0 0 *" в поле "Версия сборки".

Мой вопрос: как мне показать это значение на моей веб-странице? В настоящее время я пытаюсь выполнить следующие

@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()

К сожалению, он всегда печатает "0.0.0.0". Реально, я бы хотел, чтобы он печатал 1.0.0.xyz. Я также хотел бы напечатать дату/время, когда произошла последняя сборка. Однако я не знаю, как это сделать.

Что я делаю неправильно?

Ответ 1

Чтобы напечатать номер версии сборки, в которой был определен контроллер, который отобразил это представление:

@ViewContext.Controller.GetType().Assembly.GetName().Version

и для даты сборки:

@File.GetCreationTime(ViewContext.Controller.GetType().Assembly.Location)

Ответ 2

Я обычно делаю расширение HtmlHelper для этой цели. Что-то вроде этого:

public static class HtmlHelperExtensions
{
    public static IHtmlString AssemblyVersion(this HtmlHelper helper)
    {
        var version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
        return MvcHtmlString.Create(version);
    }
}

И чем вы можете просто позвонить:

@Html.AssemblyVersion()

Ответ 3

Если вы публикуете свое приложение на производственном сервере, я бы рекомендовал использовать что-то вроде

@String.Format(
    "{0:dddd, MMMM d, yyyy HH:mm:ss}", 
    File.GetLastWriteTime(ViewContext.Controller.GetType().Assembly.Location))

для получения даты.

Это будет печатать фактическую дату публикации, так как File.GetCreationTime() даст вам дату, когда фактическая сборка dll была первой, скопированной на сервере.

Ответ 4

Рабочее решение для правильной даты модификации после развертывания:

@File.GetLastWriteTime(@System.Reflection.Assembly.GetExecutingAssembly().Location)

Может использоваться и в MVC5.

Ответ 5

Это печатает текущий номер версии, как указано в файле AssemblyInfo.cs для печати в представлении ASP.NET MVC:

@(typeof(MyController).Assembly.GetName().Version.ToString())

Замена MyController, конечно, вашим соответствующим именем контроллера MVC.

Ответ 6

Ваша версия сборки может быть установлена ​​с помощью AssemblyFileVersionAttribute, к которой необходимо получить доступ.

AssemblyFileVersionAttribute attr = typeof(MyController).Assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).OfType<AssemblyFileVersionAttribute>().FirstOrDefault();

if (attr != null)
{
    return attr.Version;
}

MvcDiagnostics Nuget package делает это простым.

Ответ 7

Если вам нужно это в виде Razor, это работает для меня. Мне нужен был префикс System.IO.* Чтобы он работал у меня.

<!--
Version @System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(YourNamespace.Program).Assembly.Location).ProductVersion
Last deployed on @System.IO.File.GetCreationTime(typeof(YourNamespace.Program).Assembly.Location)
-->

Выводит следующее:

<!--
Version 1.0.0
Last deployed on 04/19/2019 1:36:24 PM
-->