You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 3.1 Web API切换EF Core至Sqlite时迁移触发TypeLoadException

解决ASP.NET Core 3.1 EF Core切换SQLite时迁移命令报错的问题

嘿,这个问题我之前也踩过坑,本质就是EF Core版本不兼容搞出来的麻烦,我来帮你捋清楚问题出在哪以及怎么解决:

问题根源

你用的是ASP.NET Core 3.1,这个版本对应的EF Core必须是3.1.x系列,但错误日志里明确提到了Microsoft.EntityFrameworkCore, Version=5.0.0.0——这说明你的项目里同时混了EF Core 3.1和5.0的包!

SemanticVersionComparer这个类型是EF Core 5.0才新增的,3.1版本里根本没有这个类,当迁移工具试图调用这个不存在的类型时,自然就抛出了类型加载失败的错误。大概率是你安装Sqlite包的时候,不小心装了5.0版本的,和原本的3.1 EF Core冲突了。

解决步骤

1. 检查并统一EF Core包版本

打开你的项目文件(.csproj),找到所有Microsoft.EntityFrameworkCore.*开头的包引用,比如Microsoft.EntityFrameworkCore.Sqlite、Microsoft.EntityFrameworkCore.Tools这些,确保它们的版本全部是3.1.x(和你的ASP.NET Core版本严格对应),绝对不能有5.0的版本。

举个正确的包引用例子:

<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.32" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.32">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

2. 清理冲突的包并重新安装

如果发现有5.0版本的包,先卸载它们:

Uninstall-Package Microsoft.EntityFrameworkCore -Version 5.0.0
Uninstall-Package Microsoft.EntityFrameworkCore.Sqlite -Version 5.0.0

然后重新安装对应3.1版本的包:

Install-Package Microsoft.EntityFrameworkCore.Sqlite -Version 3.1.32
Install-Package Microsoft.EntityFrameworkCore.Tools -Version 3.1.32

或者直接修改.csproj文件后,右键项目选择「还原NuGet包」也可以。

3. 重新执行迁移命令

清理完依赖后,重启你的命令行窗口或者Visual Studio(避免缓存干扰),然后重新执行迁移命令:

add-migration initial -context ApplicationContext

额外提醒

ASP.NET Core和EF Core的版本是强绑定的,3.1的项目必须用3.1版本的EF Core,5.0的项目对应5.0,跨版本混用很容易出现这类奇怪的兼容性问题,以后安装包的时候一定要注意版本匹配哦!

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:29:51