首页 > 其他分享 >全面掌握Directory.Build.props

全面掌握Directory.Build.props

时间:2024-02-28 20:48:00浏览次数:36  
标签:版本号 dotnet build props Directory Build

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

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映像

标签:版本号,dotnet,build,props,Directory,Build
From: https://www.cnblogs.com/amisoft/p/18041683

相关文章

  • 用宝塔设立分发Directory.Build.props及其Import文件的网站
    新建站点服务器名称我们约定是dev.amihome.cn创建的默认站点有下面4个文件把本地的文件,用宝塔上传上图我们是把本地的Directory.Build.props文件上传到了网站的根目录然后我们要上传本地的version-numbers文件夹到网站根目录下:最终我们windows下的相关文件上传到了网站......
  • 适配http分发Directory.Build.props文件,需要替换默认的微软sdk:8.0映像
    背景我们是把Directory.Build.props及其Import的文件,都放在http://dev.amihome.cn那么dockerbuild的时候,也是需要下载Directory.Build.props及其Import的文件的。为了统一这个操作,减少到处写下载脚本的工作,我们把这个下载的脚本,放在映像里。所以我们以mcr.microsoft.com/dotn......
  • 用Docker发布网站时,自动下载Directory.Build.props及其Import的文件
    为Blazor网站项目,“添加Docker支持”这时,网站项目根目录下会新增Dockerfile。#Seehttps://aka.ms/customizecontainertolearnhowtocustomizeyourdebugcontainerandhowVisualStudiousesthisDockerfiletobuildyourimagesforfasterdebugging.FROMmcr.......
  • Java遇到PKIX path building failed错误的解决办法
    Java调用HTTPS可能出现如下错误:PKIXpathbuildingfailed:sun.security.provider.certpath.SunCertPathBuilderException:unabletofindvalidcertificationpathtorequestedtarget。测试验证测试是否会出现本问题可以使用如下命令:javaSSLPokejira.example.com443......
  • 解决uniapp项目中使用vant Weapp图标组件报错问题(Module build failed from ./node_mo
    解决uniapp项目中使用vantWeapp图标组件报错问题(Modulebuildfailedfrom./node_modules/postcss-loader/src/index):https://blog.csdn.net/it_cgq/article/details/111991644?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170909210216800225582870%2522%252C%252......
  • Windows开发环境如何启用Directory.Build.props版本号集中管理
    每个产品一个根目录Directory.Build.props的工作模式和NuGet.Config不同,Directory.Build.props不能继承。当dotnetrestore工作的时候,会从当前目录开始,逐级向上查找,找到一个Directory.Build.props文件,就不会再向上查找了。公司如果有多套产品在开发,一般每个产品里面,对同一个包,使......
  • 创建 Harmony 项目之后 build 时可能出现 ohpm registry is empty 的错误
    HarmonyOS是最近最火的操作系统,HarmonyOS宣布删除Android代码之后,HarmonyOS正式向世界上第三大操作系统有迈进了一步,HarmonyOS前期为了完成从Android到HarmonyOS的过渡,在设计之初HarmonyOS采用了双框架架构设计。从图中可以看出无论HarmonyOS还是Android底层都是......
  • 云原生周刊:Docker 推出 Docker Build Cloud
    开源项目推荐Kube-VipKube-Vip旨在为Kubernetes集群提供高可用性和负载均衡功能。它提供了一个可插拔的VIP(虚拟IP)管理器,可以为集群中的服务分配一个虚拟IP地址,并自动将流量路由到正确的节点。该项目提供了多种配置选项,可以根据需要选择适合的负载均衡算法和IP模式。Kub......
  • vue项目npm run build的时候自动更新package.json中的version
    在vue项目最外侧新增一个addVersion.js 脚本,脚本中编写逻辑来解析当前的版本号//addVersion.jsconstfs=require('fs');constpath=require('path');constpackageJsonPath=path.join(__dirname,'package.json');try{//读取package.json......
  • cosmopolitan libc-your build-anywhere run-anywhere c library
    author'slinkCosmopolitanLibcmakesCabuild-anywhererun-anywherelanguage,likeJava,exceptitdoesn'tneedaninterpreterorvirtualmachine.Instead,itreconfiguresstockGCCandClangtooutputaPOSIX-approvedpolyglotformatthatrun......