MAUI Android平台NLog配置文件部署失败,求正确配置方法
MAUI Android平台NLog配置文件部署问题解决办法
问题背景
在MAUI应用中针对Android平台配置NLog时,出现配置文件找不到的错误,提示路径/data/user/0/com.companyname.starter/files/Android-NLog.config不存在,当前配置文件的生成操作为“从不复制”。
解决步骤
1. 调整配置文件的生成属性
找到项目中的Android-NLog.config文件,右键打开属性面板:
- 将生成操作设置为
Content - 将复制到输出目录设置为
如果较新则复制(或始终复制,确保文件被打包进APK)
2. 修改NLog初始化代码,确保配置文件被复制到目标路径
修改Android平台的NLog初始化逻辑,先将APK中的配置文件复制到应用的私有Files目录,再加载配置:
#if WINDOWS builder.Services.AddSingleton<NLog.Logger>(NLog.LogManager.Setup().LogFactory.LoadConfiguration("Windows-NLog.config").GetCurrentClassLogger()); #elif ANDROID var configFileName = "Android-NLog.config"; var targetConfigPath = Path.Combine(FileSystem.AppDataDirectory, configFileName); // 仅当目标路径无配置文件时,从APK资源复制 if (!File.Exists(targetConfigPath)) { using var assetStream = Microsoft.Maui.ApplicationModel.Platform.CurrentActivity.Assets.Open(configFileName); using var fileStream = File.Create(targetConfigPath); await assetStream.CopyToAsync(fileStream); } var logger = NLog.LogManager.Setup().LogFactory.LoadConfiguration(targetConfigPath).GetCurrentClassLogger(); builder.Services.AddSingleton<NLog.Logger>(logger); #else // 其他平台配置 #endif
关键说明
FileSystem.AppDataDirectory对应Android系统中应用的私有Files目录,也就是NLog默认搜索的路径/data/user/0/com.companyname.starter/files/- 复制逻辑只在首次启动时执行,避免重复操作
- 若将
Android-NLog.config放在Platforms/Android/Assets目录下,需将生成操作改为AndroidAsset,代码中的Assets.Open路径保持不变即可
内容的提问来源于stack exchange,提问作者Igor Markiv
相关产品推荐
相关产品推荐

