当前位置: 首页 > ops >正文

ABP Framework + EF Core 迁移命令失败问题完整解决记录

ABP Framework + EF Core 迁移命令失败问题完整解决记录

问题背景

在将开发环境升级到 Visual Studio 2022.NET SDK 最新版本 后,执行 EF Core 迁移命令时出现错误:

Add-Migration Migration_v3.7.3 -Project YourProject

报错信息显示:

  1. PowerShell 执行策略阻止运行 NuGet 脚本
  2. EF Core 和 EF6 同时安装导致冲突
  3. 无法识别 Add-Migration 命令

项目技术栈:

  • ABP Framework 7.2.3
  • EF Core 7.0.8
  • MySQL 数据库

问题排查与解决过程

1. 初始错误分析

错误现象
  • 运行 Add-Migration 时,PowerShell 报错:
    无法加载文件 C:\Users\...\init.ps1,因为有软件限制策略阻止运行该文件
    
  • 同时提示检测到 EF Core 和 EF6 共存,可能导致工具混淆。
初步尝试
  • 调整 PowerShell 执行策略(临时允许脚本运行):
    Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
    
  • 检查 EF Core 工具是否安装
    dotnet ef --version
    
    输出显示全局工具版本为 9.0.7,而项目使用的是 EF Core 7.0.8,版本不匹配。

2. 版本兼容性问题

发现版本冲突
  • ABP 7.2.3 依赖 EF Core 7.0.x,但全局 dotnet-ef 工具是 9.0.7,导致命令无法正确执行。
  • 项目中混合引用了不同版本的包:
    • Microsoft.EntityFrameworkCore.Design (7.0.8)
    • Volo.Abp.EntityFrameworkCore (7.2.3)
解决方案
  • 卸载错误的全局工具
    dotnet tool uninstall --global dotnet-ef
    
  • 安装匹配版本的 EF Core 工具
    dotnet tool install --global dotnet-ef --version 7.0.8
    
  • 验证版本
    dotnet ef --version  # 应输出 7.0.8
    

3. 清理缓存与完整重建

发现问题仍未解决

即使版本匹配后,Add-Migration 仍然报错,怀疑是 缓存污染

执行完整清理
  1. 删除 binobj 文件夹(避免旧编译结果干扰):

    rm -rf bin obj
    

    (或在 Windows 资源管理器手动删除)

  2. 清理 NuGet 缓存

    dotnet nuget locals all --clear
    
  3. 完整重建项目

    dotnet restore
    dotnet build
    
最终成功

执行 Add-Migrationdotnet ef migrations add 后,迁移命令成功运行。


问题根本原因

  1. PowerShell 执行策略限制
    • 阻止了 NuGet 包的初始化脚本运行。
  2. EF Core 全局工具版本不匹配
    • dotnet-ef 9.0.7 无法兼容 EF Core 7.0.8
  3. 项目缓存污染
    • 旧编译结果或损坏的 NuGet 缓存导致依赖解析错误。

完整解决方案总结

1. 确保版本匹配

  • ABP 7.2.3EF Core 7.0.x(推荐 7.0.13
  • 全局工具 必须与项目版本一致:
    dotnet tool install --global dotnet-ef --version 7.0.13
    

2. 调整 PowerShell 执行策略

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force

3. 清理缓存并重建

rm -rf bin obj
dotnet nuget locals all --clear
dotnet restore
dotnet build

4. 执行迁移

dotnet ef migrations add Migration_v3.7.3 --project YourProject --startup-project Mokk.CTT.Web

或(在 VS 的 Package Manager Console):

Add-Migration Migration_v3.7.3 -Project YourProject

经验总结

  1. .NET 工具链版本必须严格匹配,特别是 dotnet-efMicrosoft.EntityFrameworkCore.*
  2. 缓存问题是 .NET 开发中的“玄学问题”主要来源,遇到奇怪错误时优先清理 bin/obj 和 NuGet 缓存。
  3. ABP Framework 对 EF Core 版本敏感,建议使用官方推荐的组合(如 ABP 7.2.3 + EF Core 7.0.13)。

后续优化建议

  1. 升级到 ABP 8.x + EF Core 8.x(长期支持版本,兼容性更好)。
  2. 使用 dotnet ef 代替 Add-Migration,减少对 Visual Studio 的依赖。
  3. 在 CI/CD 流程中加入缓存清理步骤,避免构建服务器出现类似问题。

最终结论
版本匹配 + 清理缓存 是解决 .NET 生态中类似问题的黄金法则! ✅
如果你是公司:参考这个,问题已解决。此问题是由于我公司新的 PowerShell 策略造成的。我的语言模式被设置为“ConstrainLanguage”,而它应该是“FullLanguage”。安全团队帮我重置后,包管理器控制台就能重新识别 EF Core 命令了。
如果你是个人:以上都可参考,哈哈哈哈,希望对你有帮助。

最后的补充手段*很重要

问题:
无法加载文件 C:\Users\xm007.nuget\packages\microsoft.entityframeworkcore.tools\7.0.8\tools\init.ps1,因为
有软件限制策略阻止运行该文件,例如,使用组策略创建的软件限制策略。

最后手段:
控制面板=> Internet 选项 => 内容 => 发布者 => “删除垃圾证书”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我发现,不知何故,微软公司颁发的 3 个证书出现在我的计算机上的不受信任的发布者列表中(Internet 选项 | 内容 | 证书)。

将它们从列表中删除后,包管理器控制台又开始工作了(同时还出现了 Visual Studio 中一些行为异常的情况)。

整个世界都舒坦了,心情美丽!

http://www.xdnf.cn/news/16458.html

相关文章:

  • 开发笔记 | 实现人物立绘的差分效果
  • 全面解析MySQL(4)——三大范式与联合查询实例教程
  • LeetCode|Day28|67. 二进制求和|Python刷题笔记
  • 【MySQL学习|黑马笔记|Day1】数据库概述,SQL|通用语法、SQL分类、DDL
  • 归档日志-binlog
  • 元宇宙工厂前端新形态:Three.js与WebGL实现3D产线交互的轻量化之路
  • XCF32PVOG48C Xilinx Platform Flash PROM
  • Maven中的bom和父依赖
  • [Linux]线程池
  • 【免费可用】【提供源代码】对YOLOV11模型进行剪枝和蒸馏
  • 跨境协作系统文化适配:多语言环境下的业务符号隐喻与交互习惯
  • Java项目:基于SSM框架实现的社区团购管理系统【ssm+B/S架构+源码+数据库+毕业论文+答辩PPT+远程部署】
  • Nuxt3 全栈作品【通用信息管理系统】修改密码
  • 亚远景-“过度保守”还是“激进创新”?ISO/PAS 8800的99.9%安全阈值之争
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-点赞区间实现
  • 【HTTP】防XSS+SQL注入:自定义HttpMessageConverter过滤链深度解决方案
  • 【数据标注】详解使用 Labelimg 进行数据标注的 Conda 环境搭建与操作流程
  • 572. 另一棵树的子树
  • 电子签章(PDF)
  • 【0基础PS】PS工具详解--选择工具--对象选择工具
  • 【Linux | 网络】传输层(UDP和TCP) - 两万字详细讲解!!
  • 利用软件定义无线USRP X410、X440 电推进无线原型设计
  • ksql连接数据库免输入密码交互
  • 设计模式(十四)行为型:职责链模式详解
  • 飞牛NAS本地化部署n8n打造个人AI工作流中心
  • 【Java系统接口幂等性解决实操】
  • SpringSecurity实战:核心配置技巧
  • 记录几个SystemVerilog的语法——时钟块和进程通信
  • 盛最多水的容器-leetcode
  • 洛谷 P10446 64位整数乘法-普及-