点击上方蓝字关注“汪宇杰博客”

熟悉.NET Framework的人知道,我们可以通过指定AssemblyVersion为10.0.*来让编译器自增版本号。但是.NET Core和.NET Standard不行。即使有MSBump这样的开源项目,也有一定的缺陷。一般这样的需求会出现在CI/CD服务器上。我们来看看如何用Azure DevOps轻松搞定。

关于.NET Core应用版本号

我曾经谐过一篇详细的.NET Core应用版本号的文章:https://edi.wang/post/2018/9/27/get-app-version-net-core有兴趣的可以先阅读一下,因为本文的内容会基于文中的知识。(域名可能被HX,微信用户可以复制到浏览器打开)我们这次要控制的,是Version字段。

就是它

使用.NET Core CLI的build命令直接编译出来的DLL会显示这个版本。

但其实,build命令是可以加参数的,想要在不更改csproj文件的情况下build一个自定义版本可以加个/p参数,指定Version,这样搞:

dotnet build /p:Version=10.0.8888.1234

基于这个原理,我们就能控制.NET Core应用程序在编译环境的版本号。

为毛不用 MSBump

可能有朋友知道这么一个项目:MSBump,也能用来在编译时改变版本号。但是,它在编译时候会去改csproj文件,对于代码来说是一次更改。而传统.NET Fx的编译系统不会改代码。这对于我来说是无法接受的,因为引入了不可控的因素。在多人团队本地build完竟然还要签入仅仅是更改了版本号的csproj文件,不是一种好方法。并且它的默认规则,不是根据时间戳来增加版本号的,而是根据本机当前工程文件的版本。所以在多人协作的代码库里对导致版本混乱。因此我决定放弃MSBump,尽量用微软自家技术,解决自家问题。

自动生成版本号

在全自动的CI环境,我们不可能每次手工干预指定版本号。我需要一种规则和方法去生成每次都不一样,并且一眼就能判断新旧的版本号。

我个人使用的规则是:主.次.距2000年1月1日的天数.幸运数字

其中要计算的是距2000年1月1日的天数。可以用Windows计算器按出来,也可以写程序算。但在自己动手造轮子之前,一个好习惯是看看微软是否已经有现成的工具可以完成。当然,微软一定是有的:PowerShell

PowerShell计算两个日期之间相差的天数,非常简单:

$baseDate = [datetime]"01/01/2000"

$currentDate = $(Get-Date)

$interval = NEW-TIMESPAN –Start $baseDate –End $currentDate

$days = $interval.Days

配置 Azure DevOps

有了以上的知识。我们要做的,就是让Azure DevOps在编译时,自动计算出版本号,然后给build命令加上/p:Version参数。怎么做呢?很简单!

环境变量

首先,我们需要一个变量,比如叫做 buildNumber

在编译定义的variables里可以添加。随便指定一个版本号就行。

PowerShell 任务

我们要使用PowerShell计算版本号,并给刚才那个 buildNumber 变量赋值。所以,添加一个PowerShell任务,放在最前面。

给Azure DevOps编译管线里的变量赋值,有个神奇的技巧,就是用Write-Host就可以了:

##vso[task.setvariable variable=变量名称]变量值

所以最终我们的脚本是

Write-Host "Generating Build Number"

$baseDate = [datetime]"01/01/2000"

$currentDate = $(Get-Date)

$interval = NEW-TIMESPAN –Start $baseDate –End $currentDate

$days = $interval.Days

Write-Host "##vso[task.setvariable variable=buildNumber]10.0.$days.1024"

在任务属性里选择inline,复制粘贴了这段代码。 //能跑就行,实在不行,删库跑路,也挺省心。

更改.NET Core任务参数

BuildPublish任务的Arguments后面都加上:

/p:Version=$(buildNumber)

注意/p的前面有个空格

重跑编译,大功告成

触发一个CI/CD管线,可以看到日志中已经输出了正确的版本和参数。

并且部署完后,也能得到正确的版本了:

高级进阶:Azure DevOps搞定.NET Core编译版本号自增相关推荐

  1. 使用Azure DevOps Pipeline实现.Net Core程序的CD

    上一次我们讲了使用Azure DevOps Pipeline实现.Net Core程序的CI.这次我们来演示下如何使用Azure DevOps实现.Net Core程序的CD. 实现本次目标我们除了A ...

  2. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(三.实现CD持续部署管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  3. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  4. 使用Azure DevOps Pipeline实现.Net Core程序的CI

    上次介绍了Azure Application Insights,实现了.net core程序的监控功能.这次让我们来看看Azure DevOps Pipeline功能.Azure DevOps Pip ...

  5. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 打算用三个篇幅来记录完整的全过程 觉得有帮助的朋友~可以左上 ...

  6. Azure Devops/Tfs 编译的时候自动修改版本号

    看到阿迪王那边出品了一个基于Azure Devops自增版本号  链接 http://edi.wang/post/2019/3/1/incremental-build-number-for-net-c ...

  7. python网页爬虫循环获取_手把手教你用 Python 搞定网页爬虫

    原标题:手把手教你用 Python 搞定网页爬虫 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑性并且最容易获得的 ...

  8. 60分钟搞定,基于ResNet和Azure GPU加速的肺癌CT图像识别

    用深度学习技术分析医学影像和视频是一个新的研究方向.通过已训练好的卷积神经网络,能很快地搭建并训练自己的深度学习系统. 本文介绍了微软的一个比赛队伍参加2017年Kaggle肺癌CT图像检测比赛,成功 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - 用AutoMapper搞定对象映射

    基于 abp vNext 和 .NET Core 开发博客项目 - 用AutoMapper搞定对象映射 转载于:https://github.com/Meowv/Blog 本篇紧接着来玩一下AutoM ...

最新文章

  1. 没有与参数列表匹配的 重载函数 getline 实例_面试题:方法重载的底层原理?...
  2. awstats CGI模式下动态生成页面缓慢的改进
  3. mqtt 传文件断开连接的原因_mqtt 发送消息断开链接
  4. confluence6.15.4部署及问题汇总
  5. 军事武器知识图谱构建与自动问答项目QAonMilitaryKG
  6. 别让Vue3.0的谣言害了你!
  7. C#LeetCode刷题之#54-螺旋矩阵(Spiral Matrix)
  8. 2、赶去公司--网易2017春招
  9. 腾讯优图 ncnn AI 框架宣布加入 ONNX 开放生态系统
  10. 【数据分享】学生受欢迎程度评价数据集
  11. linux中fb0和fb1同时显示数据,Linux frame buffer驱动设计与实现
  12. 计算机操作系统试题题库及答案(完整版)
  13. 在virtualbox安装xp系统及安装oracle
  14. 台式计算机硬件组装应按什么步骤顺序进行,计算机硬件组装正确步骤
  15. 再谈GPU-Driven Rendering Pipelines
  16. 民科微服务小程序怎么注册_民科微服务小程序app个人端认证下载-民科微服务小程序登录官方入口下载v2.4最新版_289手游网...
  17. D - Oil Deposits
  18. in ./node_modules/html-entities/lib/index.js终端报错
  19. 云计算上安装mysql,redis
  20. 什么叫html格式化,format是什么意思 格式化自己,只为删除你???

热门文章

  1. zabbix 3.0.0beta1安装-centos6.8版本
  2. Dubbo源码解析之Zookeeper连接
  3. mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)...
  4. css 中图片旋转,倾斜,位移,平滑
  5. 安卓事件机制与页面跳转
  6. 【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错
  7. 纯css3实现的鼠标悬停动画按钮
  8. dotNet 5 中执行 Node.js
  9. .net5或.net6(Preview) 之 顶级语句
  10. BI 界震动 - Power BI Premium 个人版只要每月 120 元