为什么需要集中管理版本号?

1)同一个产品包含多个模块,对同一个包指定了不同的版本

比如A模块用了"Serilog.Sinks.Async"的“1.1.2”版本,

B模块用了“Serilog.Sinks.Async”的“1.5.0”版本,

最终集成在C项目里,就会有版本不一致的问题。大多数情况下,这个无所谓。

2)团队在使用自动集成,但是没有集中管理版本号。

如果最终的C项目,是用于部署应用程序的。这个项目的代码,很少需要改动,只是用于发布而已。

当上游的项目,重新编译并推送了新的包到NuGet仓库。

而C项目并没有在Visual Studio打开,更新整个解决方案的NuGet包。

那么Gitlab里,这个C项目的包的定义就还是旧的。

C项目在docker build、docker push和docker run之后,就还可能在使用项目A和项目B的旧的包。

Directory.Build.props的特点

这是dotnet内置的技术,原理很简单。就是dotnet restore的时候,从当前目录下开始寻找Directory.Build.props。

当前目录没有,就去上级目录里找。

直到找到一个Directory.Build.props,就不再向上寻找了。

也就是说,Directory.Build.props和NuGet.Config的机制不一样。

那么 Directory.Build.props有两个特点:

1、Directory.Build.props的定义是不能继承,也不能映像子目录的。

2、和*.csproj文件一样,可以Import其它的文件

如何共享Directory.Build.props及其Import的文件呢?

1、设立分发文件的http网站

用宝塔设立分发Directory.Build.props及其Import文件的网站

2、Windows开发环境的共享

Windows开发环境如何启用Directory.Build.props版本号集中管理

3、在Gitlab Runner里,dotnet build的时候,获取文件

Gitlab中的打包作业完成后,更新http服务器里的版本号文件

这篇文章里,就是这一句话在起作用:

build-job:       # This job runs in the build stage, which runs first.
  stage: build
  before_script:
    - bash $DOWNLOAD_ALL_DIRECTORY_BUILD_PROPS_FILES $DIRECTORY_BUILD_DIST_SERVER_DIRECTORYNAME

$DOWNLOAD_ALL_DIRECTORY_BUILD_PROPS_FILES 这个脚本哪里找?在这篇文章里:

制作docker方式执行Gitlab Runner所需要的镜像

4、在Gitlab Runner里,dotnet pack成功之后,把最新版本号写入分发文件的网站

Gitlab中的打包作业完成后,更新http服务器里的版本号文件

这篇文章里,调用这一段脚本,就可以了:

更新版本号:   # This job runs in the test stage.
  stage: update-version    # It only starts when the job in the build stage completes successfully.
  script:
    - echo "SSH到http服务器,更新文件里的版本号……"
    - bash $DIRECTORY_BUILD_UPDATE_VERSION_SH $DIRECTORY_BUILD_DIST_SERVER_USER $DIRECTORY_BUILD_DIST_SERVER $DIRECTORY_BUILD_DIST_SERVER_DIRECTORYNAME "Directory.Build.Change.EasyComment.props" $EASY_COMMENT_VERSION_ID

$DIRECTORY_BUILD_UPDATE_VERSION_SH 这个脚本哪里找?在这篇文章里:

制作docker方式执行Gitlab Runner所需要的镜像

5、在Gitlab Runner里,docker build的时候,获取最新文件

用Docker发布网站时,自动下载Directory.Build.props及其Import的文件

在Visual Studio生成的Dockerfile里,把

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build

修改成这样即可:

FROM docker.amicap.cn/amihome/dotnet/sdk8:2024 AS build

WORKDIR /
# 因为要运行下边这个shell,所以build镜像不能用默认的mcr.microsoft.com/dotnet/sdk:8.0
# 我们自己的镜像是包含下边这个shell的
RUN /home/public/download-directory-builds-props.sh dev.amihome.cn

这里用到的docker.amicap.cn/amihome/dotnet/sdk8:2024,根据这篇文章来制作:

适配http分发Directory.Build.props文件,需要替换默认的微软sdk:8.0映像

全面掌握Directory.Build.props的更多相关文章

  1. Roslyn 使用 Directory.Build.props 管理多个项目配置

    在一些大项目需要很多独立的仓库来做,每个仓库之间都会有很多相同的配置,本文告诉大家如何通过 Directory.Build.props 管理多个项目配置 在我的 MVVM 框架需要三个不同的库,一个是 ...

  2. 2019-11-29-Roslyn-使用-Directory.Build.props-文件定义编译

    title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2019-11-29 08 ...

  3. 2019-5-21-Roslyn-使用-Directory.Build.props-管理多个项目配置

    title author date CreateTime categories Roslyn 使用 Directory.Build.props 管理多个项目配置 lindexi 2019-05-21 ...

  4. 2018-10-19-Roslyn-使用-Directory.Build.props-文件定义编译

    title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2018-10-19 18 ...

  5. 从头认识一下docker-附带asp.net core程序的docker化部署

    从头认识一下docker-附带asp.net core程序的docker化部署 简介 在计算机技术日新月异的今天, Docker 在国内发展的如火如荼,特别是在一线互联网公司, Docker 的使用是 ...

  6. 【译】尝试使用Nullable Reference Types

    随着.NET Core 3.0 Preview 7的发布,C#8.0已被认为是“功能完整”的.这意味着它们的最大亮点Nullable Reference Types,在行为方面也被锁定在.NET Co ...

  7. 2019-11-29-VisualStudio-使用三个方法启动最新-C#-功能

    原文:2019-11-29-VisualStudio-使用三个方法启动最新-C#-功能 title author date CreateTime categories VisualStudio 使用三 ...

  8. 2019-4-15-VisualStudio-如何在-NuGet-包里面同时包含-DEBUG-和-RELEASE-的库

    title author date CreateTime categories VisualStudio 如何在 NuGet 包里面同时包含 DEBUG 和 RELEASE 的库 lindexi 20 ...

  9. 2018-8-10-VisualStudio-使用三个方法启动最新-C#-功能

    title author date CreateTime categories VisualStudio 使用三个方法启动最新 C# 功能 lindexi 2018-08-10 19:16:52 +0 ...

  10. 2019-7-22-Roslyn-获得-sln-文件所在的文件夹

    title author date CreateTime categories Roslyn 获得 sln 文件所在的文件夹 lindexi 2019-07-22 08:57:14 +0800 201 ...

随机推荐

  1. 拼多多的U盘都是垃圾

    春节期间陪孩子玩拼多多的果园, 然后发现推送的U盘很便宜就买了下 结果发现.. U盘都是扩容盘,非常垃圾 如下图: 警告: 只有 255933 MB可测试,总容量 255935 MB. 媒体很可能已损 ...

  2. 大数据从业者必知必会的Hive SQL调优技巧 | 京东云技术团队

    摘要:在大数据领域中,Hive SQL被广泛应用于数据仓库的数据查询和分析.然而,由于数据量庞大和复杂的查询需求,Hive SQL查询的性能往往不尽人意.本文针对Hive SQL的性能优化进行深入研究 ...

  3. React Hooks源码深度解析

    作者:京东零售 郑炳懿 前言 React Hooks是React16.8 引入的一个新特性,它允许函数组件中使用state和其他 React 特性,而不必使用类组件.Hooks是一个非常重要的概念,因 ...

  4. axios文件上传和 Content-Type类型介绍

    Content-Type的作用是什么? Content-Type: 用于在请求头部指定资源的类型和字符编码. 请求头中的content-type,就是 B端发给S端的数据类型描述 . 即告诉服务器端, ...

  5. 【K哥爬虫普法】百亿电商数据,直接盗取获利,被判 5 年!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  6. 大数据面试题集锦-Hadoop面试题(二)-HDFS

    你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案.如果你需要更多的面试经验和面试题,关注一下"张飞的猪大数据分享"吧,公众号会不定时的分享相关的知识和资料. 目录 ...

  7. 没有安装vs通过Rider编译Dll

    没安装vs怎样生成dll? 比起VS那庞大的体积和编码效率,我还是更喜欢使用Rider(和VS的神级插件Resharper是同一家公司的产品),那么在没有安装VS的电脑上是否可以在命令行下把C#代码生 ...

  8. 强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

    强化学习从基础到进阶-案例与实践[1]:强化学习概述.序列决策.动作空间定义.策略价值函数.探索与利用.Gym强化学习实验 1.1 强化学习概述 强化学习(reinforcement learning ...

  9. 【Python】一篇拿下类属性与类方法详解【超详细的注释和解释】

    文章目录 前言 类的实例化 类的非静态属性或方法(实例属性和方法) 类的静态属性和方法 静态属性(静态成员变量) 静态方法 类方法(静态成员函数) 总结 属性的访问权限 尾声 前言 先赞后看好习惯 打 ...

  10. 案例:DG备库报错ORA-600[2619]致使mrp进程异常终止

    很多刚入行的DBA往往一看有ORA-600这类错误就不知所措,直接就想寻求中高级DBA支持,甚至在网上还看到有人说,判断一个Oracle DBA是否达到中级以上,就是看其是否可以独立思考处理ORA-6 ...