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

.NET MAUI Android依赖添加问题:DLL未打包致反射加载失败

MAUI Android 运行时反射加载DLL问题解决

问题根源

Windows平台下Resources/Raw里的文件默认会被标记为内容文件并复制到输出目录,但Android平台需要明确设置构建操作,否则DLL不会被打包进APK。

解决步骤

1. 设置DLL的构建属性

  • 右键Resources/Raw目录下的目标DLL文件,打开「属性」面板
  • 将构建操作改为AndroidAsset,复制到输出目录设置为「始终复制」或「如果较新则复制」
  • 这样配置后,DLL会被打包到APK的assets目录中

2. 调整反射加载逻辑(Android专属)

Android的assets目录是只读的,无法直接从中加载程序集,需要先将DLL复制到应用可读写的私有目录,再进行反射加载:

using Android.App;
using System.IO;
using System.Reflection;

// 获取Android应用上下文
var context = Application.Context;
// 定义目标存储目录(应用私有文件目录下的Plugins文件夹)
var pluginDir = Path.Combine(context.FilesDir.AbsolutePath, "Plugins");
Directory.CreateDirectory(pluginDir);

// 示例:加载MyPlugin.dll
var dllFileName = "MyPlugin.dll";
var targetPath = Path.Combine(pluginDir, dllFileName);

// 从assets复制DLL到目标路径
using (var assetStream = context.Assets.Open(dllFileName))
using (var fileStream = new FileStream(targetPath, FileMode.Create))
{
    assetStream.CopyTo(fileStream);
}

// 加载程序集
var assembly = Assembly.LoadFrom(targetPath);

3. 验证打包结果

构建Android项目后,找到生成的APK文件,用解压工具打开,检查assets目录下是否存在你的DLL,确认打包成功。

额外注意

  • 确保DLL是兼容net8.0-android的版本(比如.NET标准库或针对Android编译的DLL),避免使用Windows专属的编译产物
  • 如果DLL存在依赖,需要将所有依赖文件按同样方式处理,一并复制到目标目录

内容的提问来源于stack exchange,提问作者Hadi Mohammadi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:43:14