MAUI项目引用C++原生DLL时VS抛出DLLNotFoundException问题求助
解决MAUI Windows项目中C++原生DLL引用及找不到的问题
核心问题原因
MAUI Windows项目无法直接将C++原生DLL作为程序集引用(这就是黄色感叹号的由来),原生DLL需要被复制到应用运行时的输出目录,且必须匹配项目的目标架构(x64/x86/ARM64)。
具体修复步骤
1. 移除无效的原生DLL引用
右键项目中带黄色感叹号的C++原生DLL,选择移除,彻底清理无效引用。
2. 重新规划DLL存放结构
在项目根目录新建NativeDlls文件夹,按架构分类存放原生DLL:
NativeDlls/x64/你的原生DLL.dllNativeDlls/x86/你的原生DLL.dll(若需要支持x86架构)NativeDlls/ARM64/你的原生DLL.dll(若需要支持ARM64架构)
3. 配置原生DLL的复制属性
将原生DLL添加到项目中:
- 右键项目 → 添加 → 现有项,选中对应架构下的原生DLL。
- 选中添加后的DLL,在属性窗口设置:
- 生成操作:
内容 - 复制到输出目录:
如果较新则复制(或始终复制) - 平台目标:匹配DLL的编译架构(比如x64)
- 生成操作:
4. 修正托管C# DLL的DllImport路径
在托管C# DLL的DllImport声明中,只写DLL文件名即可(确保最终DLL和应用exe在同一目录):
[DllImport("你的原生DLL.dll", CallingConvention = CallingConvention.Cdecl)] private static extern void 你的原生函数();
如果按架构分目录存放,也可以动态加载:
public static void LoadNativeDll() { var arch = RuntimeInformation.ProcessArchitecture; string dllPath = Path.Combine(AppContext.BaseDirectory, arch.ToString(), "你的原生DLL.dll"); NativeLibrary.Load(dllPath); }
5. 统一项目目标架构
右键MAUI项目 → 属性 → 生成,将平台目标设置为与原生DLL一致的架构(比如x64),避免Any CPU导致的架构不匹配问题。
6. 验证输出目录
构建项目后,检查输出目录(例如bin/x64/Debug/net6.0-windows10.0.19041.0/win10-x64/),确认原生DLL已被复制到该目录(或对应架构子目录)。
额外注意事项
- 确保C++原生DLL是针对Windows 10 19041及以上版本编译的,与MAUI项目的Windows目标版本匹配。
- 如果托管C# DLL是独立类库项目,优先通过项目引用关联到MAUI项目,而非手动复制DLL文件。
内容的提问来源于stack exchange,提问作者peakpeakt
相关产品推荐
相关产品推荐

