You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.dll
  • NativeDlls/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:36:28