代码改变世界

天行健,君子以自强不息

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  108 随笔 :: 0 文章 :: 3 评论 :: 21131 阅读
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

为什么需要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的结构

截图如下:

img

文字版本如下:

<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放在一个文件夹下。

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

img

posted on   终南山人  阅读(133)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示