Ubuntu下运行ASP.NET项目遇EF程序集找不到错误求助
问题分析与解决
当ASP.NET项目使用EF时出现FileNotFoundException,明明Microsoft.EntityFrameworkCore.Relational.dll和项目DLL在同一目录却加载失败,可从以下几个方向排查:
版本不匹配
检查项目依赖的包版本和本地DLL版本是否完全一致。比如项目配置里引用的是8.0.1版本,但你放置的是8.0.2的DLL,反之亦然。
- 操作:打开项目的
.csproj文件,查看<PackageReference>节点中Microsoft.EntityFrameworkCore.Relational的版本号;也可以用dotnet list package命令快速查看已安装的包版本,确保和本地DLL版本完全对应。
依赖项缺失
Microsoft.EntityFrameworkCore.Relational本身依赖其他多个DLL(比如Microsoft.EntityFrameworkCore、Microsoft.Extensions.Logging.Abstractions等),如果这些依赖文件不在输出目录,单独复制目标DLL也会加载失败。
- 操作:不要手动复制单个DLL,改用
dotnet publish命令重新发布项目,该命令会自动把所有依赖的DLL都复制到输出目录。
程序集绑定重定向冲突
项目可能存在程序集绑定重定向配置,指定了与本地DLL不符的版本,导致加载时找错文件。
- 操作:检查项目的
runtimeconfig.json文件(.NET Core/.NET 5+项目),确认其中的版本配置是否正确;如果是传统.NET Framework项目,查看web.config里的<assemblyBinding>节点,调整重定向规则指向正确的版本。
文件损坏或权限问题
DLL文件可能因下载或复制过程损坏,或者运行程序的用户没有读取该文件的权限。
- 操作:删除现有DLL,从本地NuGet缓存(路径通常是
~/.nuget/packages/microsoft.entityframeworkcore.relational/对应版本/lib/net8.0)重新复制完整的DLL;右键DLL文件,检查“属性”-“安全”选项卡,确保运行程序的用户拥有读取权限。
目标框架不兼容
项目的目标框架(比如.NET 8)和DLL编译的目标框架不匹配,比如DLL是针对.NET 6编译的,而项目使用.NET 8运行。
- 操作:打开
.csproj文件确认<TargetFramework>节点的框架版本,重新安装对应框架版本的Microsoft.EntityFrameworkCore.Relational包。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

