如何在global.json中同时固定配置多个版本的.NET SDK
核心结论
单个global.json做不到同时固定两个跨大版本的.NET SDK。这个文件的SDK选择规则对所在目录及所有子目录全局生效,最终只会匹配出一个符合规则的SDK版本供目录下所有项目使用,没法在同一个配置文件里给不同项目指定不同的SDK版本。
混合版本项目的配置方案
利用global.json的就近匹配规则,分目录放配置文件就能实现不同项目锁定对应SDK版本的效果,操作很简单:
- 先按项目的目标框架拆目录:所有.NET 6项目放仓库根目录层级,所有.NET 5项目统一归到一个单独的子目录里
- 仓库根目录放一份
global.json,配置锁定6.0.300版本SDK,覆盖所有根目录下的.NET 6项目 - 在存.NET 5项目的子目录里再放一份
global.json,配置锁定5.0.201版本SDK,这份配置优先级比上层目录的高,只会作用于子目录下的.NET 5项目
对应的目录结构参考:
your-repo/ ├── global.json # 配置SDK版本为6.0.300,rollForward规则按需设置 ├── Net6Service/ ├── Net6WebApp/ └── Net5Legacy/ # 所有.NET5项目都放在这个目录下 ├── global.json # 配置SDK版本为5.0.201,优先级高于根目录配置 ├── Net5OldService/ └── Net5OldWeb/
.NET SDK查找
global.json的逻辑是:从执行dotnet命令的当前工作目录开始,逐级往上找配置文件,离当前目录最近的global.json优先级最高,会覆盖所有上层目录的SDK版本设置。
最后补个实用提示:如果你的项目没有强依赖5.0.201版本的专属构建特性或者特定bug修复,同是.NET 5主版本的高版本SDK完全可以正常编译目标框架为.NET 5的项目,不会有兼容性问题,没必要刻意锁定小版本。
内容的提问来源于stack exchange,提问作者LA.27
相关产品推荐
相关产品推荐

