VS2019打开edmx文件报设计器无法显示文件、Npgsql提供程序错误
Visual Studio 2019打开edmx提示Npgsql提供程序未加载问题排查方案
问题表现
打开edmx文件时弹出提示:The entity data model designer is unable to display the file your requested(实体数据模型设计器无法显示您请求的文件),错误列表同步报错:The ADO.NET provider with invariant name 'Npgsql' is either not registered in the machine or application config file, or could not be loaded. See the inner exception for details.(固定名称为'Npgsql'的ADO.NET提供程序未在计算机或应用程序config文件中注册,或无法加载,详细信息请查看内部异常)
排查解决步骤
- 校验NuGet包版本匹配性
右键项目打开「管理NuGet程序包」面板,检查已安装的Npgsql、EntityFramework6.Npgsql(EF框架对应适配包)大版本是否完全一致,例如Npgsql为6.x版本时,不可搭配4.x版本的EntityFramework6.Npgsql。存在版本不匹配时直接卸载两个包,重新安装版本完全兼容的组合,安装完成后重启Visual Studio再尝试打开edmx。 - 检查项目配置文件注册节点
打开项目根目录的App.config(桌面/控制台类项目)或Web.config(Web类项目),定位到两个配置节点:<entityFramework>配置段下的<providers>节点,需存在Npgsql提供程序注册项:
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" /><system.data>配置段下的<DbProviderFactories>节点,需存在Npgsql工厂类注册项:
若节点下存在重复的Npgsql注册条目,直接删除重复项避免配置冲突。<add name="Npgsql Data Provider" invariant="Npgsql" description=".NET Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" /> - 修复Visual Studio全局提供程序注册
关闭所有Visual Studio进程,打开VS2019安装目录下的PrivateAssemblies文件夹,确认文件夹内存在和项目版本一致的Npgsql.dll、EntityFramework6.Npgsql.dll文件。文件缺失时,将项目输出目录中对应版本的两个dll复制到该路径,随后以管理员身份打开VS2019开发者命令提示符,依次执行以下命令将程序集注册到全局缓存:gacutil /i Npgsql.dll gacutil /i EntityFramework6.Npgsql.dll - 修正项目平台目标配置
右键项目打开「属性-生成」面板,检查平台目标设置:若安装的Npgsql为64位版本,需取消「首选32位」勾选,将平台目标设置为和依赖包一致的架构,保存配置后重启VS重试。 - 清除编译缓存与组件缓存
关闭Visual Studio,删除项目目录下的bin、obj文件夹,同时打开路径%LocalAppData%\Microsoft\VisualStudio\16.0_xxxx\ComponentModelCache(xxxx为VS2019对应实例的随机后缀),删除该目录下所有缓存文件,重新打开VS加载项目后再尝试打开edmx。
内容的提问来源于stack exchange,提问作者BITZ
相关产品推荐
相关产品推荐

