在网页上显示构建版本

时间:2016-09-21 01:49:31

标签: continuous-integration asp.net-core azure-devops

我正在使用asp.net核心开发一个网站 我将其与Visual Studio或/和VSTS一起发布。

我想显示一些关于它在网页上的构建的信息 (类似于rev 2016.9.20.4002

我该怎么做?

5 个答案:

答案 0 :(得分:1)

看起来ApplicationEnvironment类就是您所需要的:

var appEnv = new Microsoft.Extensions.PlatformAbstractions.ApplicationEnvironment();
string version = appEnv.ApplicationVersion;

另外 How can I auto-increment an MVC 6 version number?也可能对您感兴趣,但请注意,IApplicationEnvironment已被删除。

答案 1 :(得分:1)

你的意思是这样的:

在project.json中:

{
  "title": "Your Application name",
  "version": "2016.9.20.4002",
  "copyright": "Your Company 2016",
  "description": "Awesome ASP.Net Core Application",
  "dependencies": {
//rest of project.json

然后,您可以在视图模型或模型中创建属性,例如:

    public static string Version
    {
        get
        {
            var assembly = Assembly.GetExecutingAssembly();
            var fileVersion = GetCustomAttribute<AssemblyFileVersionAttribute>(assembly);

            return fileVersion?.Version;
        }
    }

在您看来:

@model Namespace.CustomViewModel
<!--Other HTML Code-->

    <span id="applicationVersion">@CustomViewModel.Version</span>

答案 2 :(得分:1)

作为替代选项,您可以读取创建程序集的时间并以版本格式显示它。每次重建程序集时,此值都将更改为创建它的时间。

(改编自this answer .Net Core)

public static class AppInfo
{
    private static Lazy<string> buildVersion =
        new Lazy<string>(() => GetBuildVersion(Assembly.GetEntryAssembly()));

    public static string BuildVersion { get; } = buildVersion.Value;

    private static string GetBuildVersion(Assembly assembly)
    {
        var filePath = assembly.Location;
        const int c_PeHeaderOffset = 60;
        const int c_LinkerTimestampOffset = 8;

        var buffer = new byte[2048];

        using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            stream.Read(buffer, 0, 2048);

        var offset = BitConverter.ToInt32(buffer, c_PeHeaderOffset);
        var secondsSince1970 = BitConverter.ToInt32(buffer, offset + c_LinkerTimestampOffset);
        var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

        var linkTimeUtc = epoch.AddSeconds(secondsSince1970);

        var localTime = TimeZoneInfo.ConvertTime(linkTimeUtc, TimeZoneInfo.Local);
        var minutesFromMidnight = localTime.Minute + localTime.Hour * 60;

        return localTime.ToString("yyyy.M.dd.") + minutesFromMidnight;
    }
}

然后在Razor中引用它作为:

@AppInfo.BuildVersion

答案 3 :(得分:1)

您可以使用内部版本号跟踪它。

  1. 转到您的VSTS网站并创建构建定义
  2. 选择常规选项卡,指定内部版本号格式,例如:$(date:yyyyMMdd)$(rev:.r)
  3. (可选)如果要为每个签入构建队列,请选择“触发器”选项卡,选中“持续集成(CI)”并配置过滤器。
  4. 配置其他设置(例如“构建”标签中的步骤/任务) 构建完成后,转到该构建定义的摘要(单击构建定义标题超链接转到摘要页面),结果将如下所示:
  5. enter image description here

    向您的网站显示内部版本号的步骤:

    1. 为您添加替换令牌扩展VSTS
    2. 编辑您的构建定义以添加替换令牌任务
    3. 指定目标文件和根目录(对于asp.net核心应用程序,您可以指定** \ appsettings.json) enter image description here
    4. 选择“变量”选项卡并添加新变量。保存您的构建定义 enter image description here
    5. 编辑asp.net项目的appsettings.json文件。示例代码:
    6.  {
            "ConnectionStrings": {
              "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplication1-ab933d83-8f4b-4024-9f3c-1aef5339a8f3;Trusted_Connection=True;MultipleActiveResultSets=true"
            },
            "Logging": {
              "IncludeScopes": false,
              "LogLevel": {
                "Default": "Debug",
                "System": "Information",
                "Microsoft": "Information"
              }
            },
            "CodeVersion": {
              "Num": "#{MyBuildNumber}#"
            }
          }
      
      1. 为您的asp.net项目添加逻辑以读取appsettings.json以获取特定值并显示在页面中。
      2. 检入您的代码和队列构建。

答案 4 :(得分:1)

经过一天的研究,终于找到/创建了比使用Marketplace中任何随机应用(替换令牌)更好的选择。

我正在讨论的选项已在VSTS,Azure CLI任务中提供。

以下是疱疹:

  1. 在appsettings.json
  2. 中添加初始值为1.0的设置BUILD_NUMBER
  3. 在您的应用中阅读appsettings.json并显示它。我相信你们都足够聪明,可以弄清楚如何使用appsettings在WebApplication上显示Build Number。
  4. 在Azure门户中,类似地在应用程序的应用程序服务下的Azure应用程序设置部分中创建名为BUILD_NUMBER的应用程序设置,初始值为1.0。
  5. 在VSTS中,在您的版本定义中,添加任务Azure CLI。
  6. 使用以下CLI命令填充所需字段,例如Azure订阅,脚本位置和内联脚本以及最后但最重要的内联脚本
  7. az webapp config appsettings set -n iCoreTestApi -g ArchitectsSandbox -s Dev --settings BUILD_NUMBER=$(Build.BuildNumber)

    命令解释:

    • iCoreTestApi应替换为您在Azure中的真实WebApp或Api名称
    • ArchitectsSandbox应该由Azure中的资源组替换
    • Dev是插槽名称,您可能有也可能没有。
    • 其余命令保持不变。

    在成功完成部署后,您将对新构建进行排队,您可以看到Azure上的应用程序设置部分已使用新的BUILD_NUMBER进行更新。

    如果您还有任何疑问,请与我联系。