.NET Core 3.1 Web API发布Azure时EF迁移及dotnet-ef安装报错
问题回顾
执行dotnet tool install dotnet-ef --version 3.1.32时收到兼容性错误:
Error NU1202: Package dotnet-ef 3.1.32 is not compatible with net60 (.NETFramework,Version=v6.0) / any. Package dotnet-ef 3.1.32 supports: netcoreapp3.1 (.NETCoreApp,Version=v3.1) / any
dotnet : The tool package could not be restored.
已安装.NET SDK 3.1.426和6.0.115,但系统默认使用.NET 6环境执行命令,手动设置MSBuildSDKsPath无效。
问题原因
MSBuildSDKsPath通常由当前终端加载的.NET SDK版本自动配置,dotnet CLI工具安装流程优先遵循当前目录的global.json配置或系统默认的"最新SDK版本"规则,手动设置该环境变量无法覆盖CLI的SDK版本选择逻辑。
解决方案
1. 用global.json锁定项目SDK版本
在项目根目录创建或修改global.json文件,指定使用3.1.426版本的SDK:
{ "sdk": { "version": "3.1.426" } }
保存后在该目录下重新执行dotnet-ef安装命令,CLI会自动使用指定的3.1 SDK环境。
2. 安装工具时直接指定目标框架
执行安装命令时添加--framework参数,明确指定适配netcoreapp3.1:
dotnet tool install dotnet-ef --version 3.1.32 --framework netcoreapp3.1
3. 临时切换终端SDK版本(快速测试)
在终端中执行以下命令,生成临时的global.json锁定SDK版本:
dotnet new globaljson --sdk-version 3.1.426 --force
随后在当前终端执行dotnet-ef安装命令即可。
额外说明
完成dotnet-ef工具安装后,若需要恢复默认SDK版本,可删除项目目录下的global.json文件。
内容的提问来源于stack exchange,提问作者NewUser

