.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
相关产品推荐
相关产品推荐

