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

如何在C# MAUI项目中通过相对路径加载指定DLL文件

在Mac平台MAUI项目中用相对路径加载HID DLL的解决方案

1. 先搞定DLL的项目复制配置

把Lib文件夹里的DLL添加到项目后,务必右键该DLL文件,修改以下属性:

  • 生成操作:设为Content
  • 复制到输出目录:设为如果较新则复制(或始终复制)
    这一步是核心——如果没配置,DLL根本不会被打包到最终的Mac应用包中,后续路径再对也找不到文件。

2. 用MAUI提供的基础目录构建路径

Mac上MAUI应用的运行目录不是你本地项目的根目录,而是应用包内部的固定路径,绝对不能用硬编码的相对路径(比如../Lib/xxx.dll)。正确的做法是通过AppContext.BaseDirectory获取应用的执行根目录,再拼接Lib文件夹和DLL名称:

加载托管DLL(C#编写的DLL)

using System.Reflection;
using System.IO;

var baseDir = AppContext.BaseDirectory;
var dllFullPath = Path.Combine(baseDir, "Lib", "YourHidDll.dll");
var hidAssembly = Assembly.LoadFrom(dllFullPath);

加载原生库(Mac上的.dylib,对应Windows的DLL)

如果你的HID接口是原生库,要用NativeLibrary动态加载:

using System.Runtime.InteropServices;
using System.IO;

var baseDir = AppContext.BaseDirectory;
var libFullPath = Path.Combine(baseDir, "Lib", "libYourHidLib.dylib");
// 加载库
IntPtr libHandle = NativeLibrary.Load(libFullPath);
// 获取函数指针并转换为委托(示例)
var initHidPtr = NativeLibrary.GetExport(libHandle, "InitHidInterface");
var initHid = Marshal.GetDelegateForFunctionPointer<InitHidDelegate>(initHidPtr);
// 调用函数
initHid();

// 定义对应函数的委托
delegate void InitHidDelegate();

3. 验证应用包内的文件是否存在

运行项目后,在Mac上找到生成的.app文件,右键选择「显示包内容」,检查Contents/MacOS/Lib目录下是否有你的DLL/库文件:

  • 如果没有,回到第一步重新检查复制属性
  • 如果存在但仍加载失败,检查文件名是否和代码中完全一致(Mac区分大小写)

4. 处理Mac权限问题

如果是原生.dylib库,确保文件有可执行权限:

  1. 在终端中定位到Lib文件夹
  2. 执行命令:chmod +x libYourHidLib.dylib
  3. 重新将库文件添加到项目中

内容的提问来源于stack exchange,提问作者Su Tony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:16:09