Отобразить версию проекта в приложении ASP.NET MVC Core (RC2)

Как отобразить версию приложения из project.json? Я использую gulp-bump для автоинкрементной версии, но я не могу показать последнюю версию. Вот что я пытаюсь:

@(Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationVersion)

Это не работает, он отображает "1.0.0" вместо реального значения из project.json

Я также пробовал это, но похоже, что он больше не работает в RC2:

@inject Microsoft.Extensions.PlatformAbstractions.IApplicationEnvironment appEnv
My version number is @(appEnv.ApplicationVersion)

Ответ 1

По это объявление, IApplicationEnvironment больше не существует.

Вы все равно можете получить доступ к ApplicationVersion статически, используя:

Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationVersion

Это работает для меня. Мой project.json выглядит следующим образом:

{
    "version": "1.0.0.2",
    // all the rest
}

И в моем индексном представлении у меня есть следующая строка вверху:

@Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationVersion

И я правильно получаю 1.0.0.2 в выводе. И когда я меняю это значение и перезапускаю (строят) приложение, там отображается новая версия.

Ответ 2

Поскольку Абстракции платформы были обловлены с помощью ASP.NET Core 1 и были удалены из ASP.NET Core 2 и выше, повторно используя версию 2 или выше, вы должны заменить эту строку:

Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationVersion

с этим:

System.Reflection.Assembly.GetEntryAssembly().GetName().Version

как указано в разделе "Замена использования API" на предыдущей связанной странице.

Ответ 3

Я использовал другой подход, как указано в этом ответе, который дал мне версию SemVer (1.0.0), которая на самом деле находится в моем project.json, а не 1.0.0.0, который возвращается принятым ответом. Таким образом, код будет выглядеть следующим образом:

var runtimeVersion = typeof(Startup)
            .GetTypeInfo()
            .Assembly
            .GetCustomAttribute<AssemblyInformationalVersionAttribute>()
            .InformationalVersion;

Он также возвращает правильные суффиксные версии, т.е. что-то вроде "2.0.1-dev01"

Ответ 4

Это сработало для меня .NET Core 2.0.5.

Код:

var assemblyVersion = System.Reflection.Assembly.GetEntryAssembly().GetCustomAttribute<System.Reflection..AssemblyInformationalVersionAttribute>().InformationalVersion;
Console.WriteLine(assemblyVersion);

myproject.csproj

<PropertyGroup>
    <VersionPrefix>1.0.0.1</VersionPrefix>
    <VersionSuffix>alpha</VersionSuffix>
</PropertyGroup>

выходы

1.0.0.1-alpha

Ответ 5

Если вы оказались здесь и пытаетесь управлять версиями проекта через версию решения.

Добавление файла Directory.Build.props в каталог решения, содержащий:

<Project>
  <PropertyGroup>
    <VersionPrefix>1.2.3</VersionPrefix>
  </PropertyGroup>
</Project>

Устанавливает свойство Version всех включенных проектов, которые "получают версию из родительского решения".

Не идеально, но позволяет управлять версией в одном месте для многопроектного решения с заблокированной версией.