为什么需要Directory.Build.props?

一个产品有了多个甚至几十个解决方案之后,每个解决方案里面的项目可能会引用一个dll包的不同版本,因此需要集中管理dll包的版本号。

.NET的Directory.Build.props文件就能解决这个问题。Visual Studio在“生成”和“发布”的时候,能读取Directory.Build.props中的定义,在Linux容器中的Gitlab-Runner里面执行dotnet restore等命令的时候,也能读取Directory.Build.props。

Directory.Build.props的结构

截图如下:

文字版本如下:

<Project>
<Import Project="version-numbers/Directory.Build.Yee.AspNetCore.props" />
<Import Project="version-numbers/Directory.Build.Yee.props" />
<Import Project="version-numbers/Directory.Build.Yee.Utils.props" />
<Import Project="version-numbers/Directory.Build.Yee.Cloud.props" />
<PropertyGroup>
<LangVersion>latest</LangVersion>
<!--<Nullable>enable</Nullable>-->
<NoWarn>$(NoWarn);NU1603;CS8618;CS8625;CS1998;CS8600;CS8629;CS8603;8601;8602;8603;8604</NoWarn>
<!--<ImplicitUsings>enable</ImplicitUsings>-->
<PackageProjectUrl>https://zimuceping.alida.group</PackageProjectUrl>
<Product>代码改变人生</Product>
<Authors>David Xiong</Authors>
<PackageReleaseNotes>https://zimuceping.alida.group/ReleaseNotes.md</PackageReleaseNotes>
<Copyright>Copyright 2022 (c) 阿力达</Copyright>
</PropertyGroup> <PropertyGroup>
<AbpVersion>8.0.4</AbpVersion>
<LeptonX_Version>3.0.4</LeptonX_Version>
<IdentityModel_Version>6.2.0</IdentityModel_Version>
<IdentityModel_OidcClient_Version>5.2.1</IdentityModel_OidcClient_Version>
<CommunityToolkit_Mvvm_Version>8.2.2</CommunityToolkit_Mvvm_Version>
<Microsoft_Windows_CsWin32_Version>0.3.49-beta</Microsoft_Windows_CsWin32_Version>
<System_IdentityModel_Tokens_Jwt_Version>7.0.3</System_IdentityModel_Tokens_Jwt_Version>
<Blazorise_Version>1.4.1</Blazorise_Version>
<ConfigureAwait_Fody_Version>3.3.1</ConfigureAwait_Fody_Version>
<Fody_Version>6.5.3</Fody_Version>
</PropertyGroup> <PropertyGroup>
<Microsoft_AspNetCore_Authentication_OAuth_Version>2.2.0</Microsoft_AspNetCore_Authentication_OAuth_Version>
<Microsoft_AspNetCore_Diagnostics_HealthChecks_Version>2.2.0</Microsoft_AspNetCore_Diagnostics_HealthChecks_Version>
<Microsoft_AspNetCore_Hosting_Version>2.2.7</Microsoft_AspNetCore_Hosting_Version>
<Microsoft_AspNetCore_Version>8.0.0</Microsoft_AspNetCore_Version>
<Microsoft_AspNetCore_Rewrite_Version>2.2.0</Microsoft_AspNetCore_Rewrite_Version>

Directory.Build.props的特点

1、递归向上寻找

dotnet在还原的时候,会从当前目录下开始查找Directory.Build.props文件,找不到就去父目录里找Directory.Build.props,直到找到一个,就不再向上寻找了。

2、Directory.Build.props文件能Import其它文件

也就是我们能把Directory.Build.props中的包的定义,分拆成多个文件。

这个对于我们已经引用了自动构建技术的,服务器上不停的在为各个项目自动生成新版本,都需要更新这里的版本号。显然,把每个版本号定义,独立到一个文件中,能避免Gitlab Runner完成工作后,写入文件时带来的并发操作的问题。

引申的问题

1、版本号的命名规范

目前我们采用的,就是把包的名字的小数点换成下划线,然后结尾加上“_Version”。每个单词的首字母大写。

2、团队成员如何共享Directory.Build.props及其Import的其他文件呢?

在没有新冠的时候,大家都在一个大地点办公,用Windows的共享目录就可以。

疫情让大家习惯了“分布式”办公,那么用网站来共享Directory.Build.props及其Import的文件,就是最好的方式。

3、Windows环境下编写批处理文件

这里是3个重点

1)download.bat

每次开发人员,想更新所有的文件的时候,要双击download.bat执行。

这个文件的内容如下:

@echo off
del Directory.* /q
for /f %%i in (urls.txt) do (echo %%i
wget %%i --content-disposition
)
dotnet nuget locals plugins-cache --clear
exit

2)urls.txt

为了便于维护,我们把前边脚本要下载的文件的列表,独立用一个纯文本文件来存储

这个文件的内容如下:

http://dev.amihome.cn/version-numbers/Directory.Build.Yee.AspNetCore.props
http://dev.amihome.cn/version-numbers/Directory.Build.Yee.Cloud.props
http://dev.amihome.cn/version-numbers/Directory.Build.Yee.props
http://dev.amihome.cn/version-numbers/Directory.Build.Yee.Utils.props

注意,区分大小写,不要有空格的行

3)wget的包

Windows操作系统的wget从这里下载

https://eternallybored.org/misc/wget/

下载的包,就和download.bat放在一个文件夹下。

最终文件夹下,有下述文件

为产品的一堆Visual Studio解决方案引入Directory.Build.props的更多相关文章

  1. 清理Visual Studio解决方案临时文件:Clean Visual Studio Solution Temporary File Build20160418

    复制保存到任意文件名.bat,放置在Visual Studio Solution目录下. 当Visual Studio Solution目录过于庞大或打算拷贝移动Visual Studio Solut ...

  2. Visual Studio解决方案vs2005/vs2008/vs2010/vs2012/vs2013/vs2015版本互相转换工具

    原文:http://blog.csdn.net/xiejiashu/article/details/52397641   本文转自EasyDarwin团队成员Alex的博客:http://blog.c ...

  3. Visual Studio解决方案的目录结构设置和管理

    摘至:http://blog.csdn.net/lp310018931/article/details/47991759 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件 ...

  4. visual studio 2015引入开源控件DockPanel(最简单的方法)

    一.DockPanel简介 DockPanel是一个开源控件,能够实现子窗口的浮动,在官方给的demo有演示,在vs2017微软已经集成进入常用控件中.我主要使用的是多窗口浮动,和tabControl ...

  5. 用资源管理器右键编译 Visual Studio 解决方案文件

    每次改动 VC 工程之后都要重新编译,每次 VS 又会生成调试数据库文件,很费时间,于是研究了一下如何在资源管理器中直接编译,还真发现了解决办法. 以下是适用 Visual Studio 2008 的 ...

  6. Visual Studio 2012,创建工程Build Driver,基于纯Source Code.

    拿到一堆纯代码,怎么去Create Project,设置Include路径,lib路径,要不要Pre-compile技术,配置Project之间的依赖关系. SourcesConverter  Bas ...

  7. Visual Studio解决方案及项目的配置

    配置解决方案的属性 1.配置解决方案平台,该配置实际上修改的是解决方案目录下的sln(solution)文件. 配置项目的属性 1.配置项目平台及项目的目标平台:项目-右键-属性-生成(竖着第二个选项 ...

  8. Visual Studio 2015官方汇总包括下载和视频

     7月20日 23:30 Visual Studio 2015正式版正式发布,作为微软新一代开发利器,在全地球乃至全宇宙乃至全太阳系中最强大 且没有之一的IDE(上述描述来自微博用户评论)跨平台支持成 ...

  9. 免费的Visual Studio的插件

    在做了深入(的)研究之后(通过在google网站搜索),,我编译了15个免费Visual Studio 2005插件表..其中一些插件将提高您(的)代码(的)质量,,另外一些能使您编译(的)更快,,但 ...

  10. 解析Visual Studio 2015促进生产力的10个新功能

    1 性能提示 Performance Tips 当我们想知道执行一段代码所耗费的时间时,需要借助于.NET 框架的Stopwatch类,像下面这样: class Program { static vo ...

随机推荐

  1. [转帖]Native Memory Tracking 详解(2):追踪区域分析(一)

    https://www.modb.pro/db/529363 上篇文章 Native Memory Tracking 详解(1):基础介绍 中,分享了如何使用NMT,以及NMT内存 & OS内 ...

  2. Oracle 提示 用户在线,无法删除的清理方法

    查找删除策略. select username,sid,serial# from v$session where username='FSSCDEC004'; alter system kill se ...

  3. 关于SSL证书的学习与总结

    关于证书 证书是用来实现https通信加密的基础, 有证书才能够进行相关的TLS层的加密处理. 本文简要讲解一下证书的申请,创建以及使用等. 第一部分: PKI 公共密钥基础 其实有很多家企业在做PK ...

  4. 兼容微信支付宝抖音小程序的工具推荐!还能将小程序搬到自己的app里面

    事情的起因是这样的. 之前在微信.支付宝和抖音开放平台都上架了自己的小程序,虽然几个平台有自己的开发标准,但是都是基于 JavaScript 这种已经被广泛使用的编程语言进行开发的,对于开发者而言学习 ...

  5. 2024了,我不想再用AOP收集业务操作日志了 | 京东云技术团队

    0.背景 在近期的项目中,系统涉及到针对系统的业务操作日志统计功能,由于本系统位于业务链路的中心环节,负责接收上游系统的数据,并将基于用户操作产生的数据传递至下游系统,鉴于业务链路的复杂性和操作场景的 ...

  6. VUe2.0 和 Vue3.0 的生命周期作对比

    VUe2.0 和 Vue3.0 的生命周期作对比 beforeCreate -> 请使用 setup() created -> 请使用 setup() beforeMount -> ...

  7. 【小测试】golang中使用string()来转换[]byte数组产生了拷贝

    下方是benchmark的数据差异: import ( "reflect" "unsafe" ) // NoAllocString convert []byte ...

  8. 基于密码学的身份混淆系统 -- idmix

    简介 Hyperledger Fabric的Idemix是一个基于密码学的身份混淆系统,它提供了一种在区块链网络中实现用户隐私的方法.Idemix的主要特性是它的零知识证明系统,这是一种允许用户证明他 ...

  9. Postman 简单使用随笔记

    1.要先使用Postman post请求,返回token,否则提示未登陆系统,下图为发送请求后的接口返回的信息 2.为方便,每次在访问接口时都要访问权限,所以将其作为局部的环境变量,设置如下: 3.要 ...

  10. workman在线五子棋

    一.下载安装workman,地址:https://github.com/walkor/workerman composer require workerman/workerman 二.cd到worke ...