C++调用带DllExport的C# DLL时出现System.Runtime加载失败求助
解决C# DllExport调用时System.Runtime加载失败问题
以下是针对你遇到的System.IO.FileNotFoundException问题的具体解决方法:
确认.NET 6运行时已安装
你的C# DLL基于.NET 6构建,C++所在的目标机器必须安装对应版本的.NET运行时。优先安装.NET 6 Desktop Runtime(适配桌面应用场景),安装后重启进程再尝试调用。将C# DLL改为自包含部署
打开C#项目属性,切换到发布选项卡:- 选择“自包含”部署模式;
- 目标运行时选择
win-x64(与你的C++平台一致); - 重新发布项目,此时输出目录会包含所有.NET运行时依赖文件,C++进程加载DLL时可直接找到
System.Runtime等组件。
保证C++与C#项目平台一致
确认你的C++项目编译目标为x64,与C# DLL的编译平台匹配,避免因32/64位架构不匹配引发的加载异常。校验函数调用约定匹配
确保C#导出函数的调用约定与C++定义的一致:
C#端导出代码示例:[DllExport("_add", CallingConvention = CallingConvention.Cdecl)] public static int Add(int a, int b) { return a + b; }若调用约定不匹配,即使能获取函数地址,调用时也可能触发异常,甚至间接导致依赖加载失败。
手动复制依赖文件到C++执行目录
若不想使用自包含部署,可将C# DLL输出目录中的System.Runtime.dll、System.Private.CoreLib.dll等核心依赖文件,复制到C可执行文件的同目录下,确保C进程能找到这些组件。
内容的提问来源于stack exchange,提问作者TomC
相关产品推荐
相关产品推荐

