可以添加要由 MSBuild 导入的某些文件,以替代默认属性设置并添加自定义目标。可以通过这些文件的放置位置在文件夹级别控制这些自定义项的范围。
本文介绍适用于以下方案的自定义:
自定义解决方案中多个项目的生成设置
在通用文件目录下自定义多个解决方案的生成设置
自定义对复杂文件夹结构中的子文件夹来说可能不同的生成设置
替代默认设置、默认生成文件夹以及 SDK 设置的其他行为,例如 Microsoft.Net.Sdk
添加或自定义应用于任意数量的项目或解决方案的生成目标
以上的内容来自微软官网:
https://learn.microsoft.com/zh-cn/visualstudio/msbuild/customize-by-directory?view=vs-2022
一、在之前,直接在.csprj文件中,指定对应的版本号即可,类似这样的:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
这样比较直观,不过随着.net从5.0一直升级,再加上框架有好多分层的时候,改起来不仅累人,而且还有一定的顺序,我个人都是从内到外,从最深层到外层,比如从common到web层,然后保证每次都能成功。
二、后来,听到有粉丝的留言,可以统一把版本写到一个文件中,然后在每一个分层进行引用即可,这样每次升级,只需要改文件,具体的操作,可以看之前我写的这篇文章:
《【Blog.Core开源】完成升级.NET 8.0》
但是这样也有一个不得劲的地方,就是每个分层,都需要写一个导入的语句。
三、在开发组-Lemon的提示下,我学习到微软官方其实已经有这个更为简单的设计思路,直接是.sln项目解决方案的文件根目录里,建一个编译的文件,指定sdk即可,
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
然后就可以把每一次的都给删除了,升级的时候,直接更新这一个文件,真真的实现一键操作。
最后,要记得是Dockerfile构建镜像的时候,要把这个文件COPY一下
有了这些简单的修改,下一篇我们就可以一键升级.net9.0啦。