2016-09-21 219 views
1

我正在开发一个使用asp.net核心的网站。
我发布它Visual Studio或/和VSTS在网页上显示内部版本

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

我该怎么做?

+0

可以相关http://stackoverflow.com/questions/39196090/info-page-about-asp-net-core/39196229#39196229 – Set

+0

谢谢,但我只需要一个版本号发布,而不是建立。 'app.UseRuntimeInfoPage()'只适合开发时间。 – qin

+0

“rev 2016.9.20.4002”是由VSTS生成的内部版本号吗? –

回答

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> 
+0

这是一个好主意,但我必须更改版本。我希望它可以自动完成。 – qin

1

就像其他选项一样,您可以读取程序集创建的时间并以版本格式显示它。每次组装重建时,该值都会更改为创建时的时间。

(改编自this answer对于.NET核心)

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; 
    } 
} 

然后只是引用它在剃刀为:

@AppInfo.BuildVersion 
1

您可以通过版本号进行跟踪。

  1. 转到您的VSTS的网站,并创建构建定义
  2. 选择常规选项卡,指定版本号的格式,例如:$(日期:年月日)$(REV:.R)
  3. (可选)选择触发器选项卡,检查持续集成(CI)并配置过滤器(如果您希望为每个签入创建队列)。
  4. 配置其他设置(例如,步骤/在Build标签的任务) 构建之后完成,转到生成定义的概要(点击构建定义标题超级链接转到摘要页面),结果将是这样的:

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文件。示例代码:
{ 
     "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}#" 
     } 
    } 
  • 逻辑添加到您的asp.net项目阅读appsettings.json得到在页面特定值和显示。
  • 检查你的代码和队列的构建。
  • +0

    但是它如何显示在我的网站上? – qin

    +0

    @qin我更新了我的答案,你可以参考我的步骤来达到你的要求。 –

    +0

    看起来不错,稍后我会尝试'替换代币扩展名'。 – qin

    1

    经过一天的研究,终于找到/创建了一个更好的选择,而不是使用Marketplace中的任何随机应用程序(Replace Token)。

    我说的选项已经在VSTS,Azure CLI任务中可用。

    这里是STPES:

    1. 添加有1.0初值appsettings.json在您的应用程序设置BUILD_NUMBER
    2. 阅读appsettings.json并显示它。我相信你们都足够聪明,能够弄清楚如何使用appsettings在你的WebApplication上显示Build Number。
    3. 在Azure门户中,类似地在应用程序的App Services下为您的应用程序创建名为BUILD_NUMBER的应用程序设置,初始值为1.0。
    4. 在VSTS中,在您的发布定义中,添加一个任务Azure CLI。
    5. 填写必填字段,如Azure订阅,脚本位置与内联脚本最后,但最重要的嵌入式脚本与以下CLI命令

    az webapp config appsettings set -n iCoreTestApi -g ArchitectsSandbox -s Dev --settings BUILD_NUMBER=$(Build.BuildNumber)

    命令解释:

    • iCoreTestApi应取而代之的是您在Azure中的真实WebApp或Api名称
    • 架构师沙箱应该被您的Azu资源组替换
    • Dev是插槽名称,您可能有也可能没有。
    • 其余命令保持不变。

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

    让我知道你是否仍然有任何问题。

    相关问题