原生C++应用通过C++/CLI互操作使用EF Core 5加载报错求助
问题解答
可以在目标框架为.NET 5的原生C应用中,通过C/CLI互操作程序集使用EF Core 5.0,你遇到的System.IO.FileNotFoundException异常是运行时找不到EF Core依赖程序集导致的,属于配置问题,不存在架构层面的兼容性障碍。
修复步骤
- 修改ManagedLibrary项目的csproj配置,在顶层
<PropertyGroup>节点下添加配置项:
该配置会强制将项目通过NuGet引入的所有依赖(包括EF Core相关的全部程序集)复制到当前项目的输出目录,解决NuGet依赖不自动复制的问题。<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> - 统一所有关联项目的输出路径:将原生C启动项目、C/CLI互操作项目、ManagedLibrary托管项目的生成输出目录调整为同一个路径,避免不同项目的输出文件分散导致依赖查找失败。如果不方便统一输出路径,可以在C++/CLI项目和原生C++项目中添加生成后事件,将ManagedLibrary输出目录下的所有.dll、.json配置文件复制到原生应用的最终输出目录。
- 确认.NET 5运行时配置文件存在:C++/CLI项目生成后会输出
[项目名].deps.json和[项目名].runtimeconfig.json两个配置文件,这两个文件必须和原生C++的.exe文件放在同一目录,.NET运行时才能正确识别依赖加载路径,加载EF Core相关程序集。
问题排查
如果调整配置后仍然抛出程序集加载失败错误,可以使用程序集绑定日志查看器(fuslogvw.exe)捕获详细的绑定日志,确认运行时查找Microsoft.EntityFrameworkCore程序集的具体路径,核对对应路径下是否存在对应版本的dll文件即可定位问题。
内容的提问来源于stack exchange,提问作者Otty
相关产品推荐
相关产品推荐

