在ASP.NET MVC Core应用程序(RC2)中显示项目版本

22

如何从project.json中显示应用程序版本号?我正在使用gulp-bump自动递增版本号,但我无法显示最新版本号。以下是我的尝试:

如何从project.json中显示应用程序版本号?我正在使用gulp-bump自动递增版本号,但我无法显示最新版本号。以下是我的尝试:

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

这个不起作用,它显示的是project.json中的实际值而不是"1.0.0"。

我也尝试过这个,但看起来在RC2中不再起作用了。

@inject Microsoft.Extensions.PlatformAbstractions.IApplicationEnvironment appEnv
My version number is @(appEnv.ApplicationVersion)
5个回答

23

自从平台抽象只随着 ASP.NET Core 1 一起发布并且已经从 ASP.NET Core 2 及以上版本中移除,如果您正在使用版本 2 或更高版本,则必须替换此行:

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

用这一个:

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

如前面链接页面中“替换API使用”一节所指定的。


1
这也不返回后缀版本。 - sabbour

21
根据这篇公告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。当我更改那个值并重新启动(构建)应用程序时,新版本会显示在那里。

我正确地获得了1.0.0.2的输出。当我更改该值并重新启动(构建)应用程序时,新版本将显示在那里。


3
抱歉,我的问题表述不够清楚:我已经在使用它了,但是显示的是1.0.0.0而不是期望的1.0.0.2。 - vmg
1
谢谢!如何自动提升项目版本? - vmg
1
哦,我明白了,真遗憾!虽然我猜四位数版本根据semver不是有效的,所以你在.NET Core项目中应该(或许?)避免使用它们(因为它旨在遵循semver)。 - poke
1
这在dotnet 1.0.0中不起作用。它会给你“文件版本”,而dotnet publish --version-suffix xxx不会改变它。它实际上改变的是“产品版本”,但我不知道如何获取它。 - rook
警告:这将为您提供执行应用程序的版本,这不一定是当前程序集的版本号(假设当前程序集是DLL)。当我运行此代码时,我得到了我运行测试的NUnit版本... - NightOwl888
显示剩余4条评论

14

我采用了不同的方法,如这个答案所述,它给了我一个SemVer版本(1.0.0),实际上在我的project.json中,而不是被接受的答案返回的1.0.0.0。因此,代码将是:

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

它同样返回正确的带后缀版本号,比如 "2.0.1-dev01"。


11

这对我在 .NET Core 2.0.5 上有效。

代码:

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

我的项目.csproj

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

输出

1.0.0.1-alpha

3
你也可以简单地使用<Version>1.0.0.1-alpha</Version>。 - jaryd

3
如果您在这里,并且想通过解决方案版本来管理项目版本,请执行以下操作:
在解决方案目录中添加一个名为Directory.Build.props的文件,其中包含:
<Project>
  <PropertyGroup>
    <VersionPrefix>1.2.3</VersionPrefix>
  </PropertyGroup>
</Project>

将“从父级解决方案获取版本”所有包含的项目的“版本属性”设置。

虽然不是理想的方法,但它允许您在一个地方管理锁定多项目解决方案的版本。


这对于“从父级解决方案获取版本”情况完美地起作用了 - 谢谢! - Matthew Joughin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接