全面掌握Directory.Build.props
为什么需要集中管理版本号?
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的更多相关文章
- Roslyn 使用 Directory.Build.props 管理多个项目配置
在一些大项目需要很多独立的仓库来做,每个仓库之间都会有很多相同的配置,本文告诉大家如何通过 Directory.Build.props 管理多个项目配置 在我的 MVVM 框架需要三个不同的库,一个是 ...
- 2019-11-29-Roslyn-使用-Directory.Build.props-文件定义编译
title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2019-11-29 08 ...
- 2019-5-21-Roslyn-使用-Directory.Build.props-管理多个项目配置
title author date CreateTime categories Roslyn 使用 Directory.Build.props 管理多个项目配置 lindexi 2019-05-21 ...
- 2018-10-19-Roslyn-使用-Directory.Build.props-文件定义编译
title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2018-10-19 18 ...
- 从头认识一下docker-附带asp.net core程序的docker化部署
从头认识一下docker-附带asp.net core程序的docker化部署 简介 在计算机技术日新月异的今天, Docker 在国内发展的如火如荼,特别是在一线互联网公司, Docker 的使用是 ...
- 【译】尝试使用Nullable Reference Types
随着.NET Core 3.0 Preview 7的发布,C#8.0已被认为是“功能完整”的.这意味着它们的最大亮点Nullable Reference Types,在行为方面也被锁定在.NET Co ...
- 2019-11-29-VisualStudio-使用三个方法启动最新-C#-功能
原文:2019-11-29-VisualStudio-使用三个方法启动最新-C#-功能 title author date CreateTime categories VisualStudio 使用三 ...
- 2019-4-15-VisualStudio-如何在-NuGet-包里面同时包含-DEBUG-和-RELEASE-的库
title author date CreateTime categories VisualStudio 如何在 NuGet 包里面同时包含 DEBUG 和 RELEASE 的库 lindexi 20 ...
- 2018-8-10-VisualStudio-使用三个方法启动最新-C#-功能
title author date CreateTime categories VisualStudio 使用三个方法启动最新 C# 功能 lindexi 2018-08-10 19:16:52 +0 ...
- 2019-7-22-Roslyn-获得-sln-文件所在的文件夹
title author date CreateTime categories Roslyn 获得 sln 文件所在的文件夹 lindexi 2019-07-22 08:57:14 +0800 201 ...
随机推荐
- 基于Apache PDFBox的PDF数字签名
在Java语言环境中完成数字签名主要基于itext-pdf.PDFBox两种工具,itext-pdf受商业限制,应用于商业服务中需要购买授权.PDFBox是apache基金会开源项目,基于apache ...
- _0x4c9738 怎么还原?嘿,还真可以还原!
_0x4c9738 变量名还原,噂嘟假嘟? 代码混淆(obfuscation)和代码反混淆(deobfuscation)在爬虫.逆向当中可以说是非常常见的情况了,初学者经常问一个问题,类似 _0x4c ...
- Leetcode 面试题22. 链表中倒数第k个节点 Java语言求解
题目链接 https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 题目内容 输入一个链表,输出该链 ...
- 通过Demo学WPF—数据绑定(一)✨
前言 想学习WPF,但是看视频教程觉得太耗时间,直接看文档又觉得似懂非懂,因此想通过看Demo代码+文档的方式进行学习. 准备 微软官方其实提供了WPF的一些Demo,地址为:microsoft/WP ...
- axios请求失败,获取接口返回错误信息
一般vue项目都会对axios进行封装,后台统一规范默认让服务器对所有请求都返回成功,然后在成功的对象里面包装一层对象result,里面也包含code,msg,result信息,前端拿这个result ...
- zblog文章采集发布插件-免费下载
推荐一款可以自动采集网页文章,并发布到zblog系统网站的zblog采集发布插件,支持简数采集器,火车头数据采集器,八爪鱼文章采集器,后羿采集器等...... zblog采集发布插件使用教程如下: 1 ...
- PHP截取文章内容
<?php /** * 实现中文字串截取无乱码的方法. */ function getSubstr($string, $start, $length) { if (mb_strlen($stri ...
- P5501 [LnOI2019] 来者不拒,去者不追 题解
题目链接:来者不拒,去者不追 直接在线查询题目所给的式子是很困难的,我们考虑单点考察贡献.对于一个已经确定的式子,我们发现加入一个数或者删除一个数的贡献如图所示: 如图所示,在原有的序列为 \((1, ...
- 洛谷P1923 求第K小的数 研讨关于输入输出效率的问题(scanf and cin ,printf and cout)
最简单的思想就是将这n个数从小到大排序,然后直接输出下标为K的数,不用想肯定会超时,三个测试点过了,另外两个超时. 那么我想的就是,既然全排序会超时,有没有什么方法可以不用全排序也可以拿出第K小的数呢 ...
- MySQL创建函数报错:1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled
创建函数时报错: 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaratio ...