升级NLog至v5后,如何使其在Avalonia Android中正常工作
解决NLog v5升级后配置加载失败的问题
以下是几个排查和解决的关键点:
确认嵌入资源的完整名称
嵌入资源的名称并非单纯的NLog.config,而是包含项目命名空间和文件路径的全名。比如你的项目命名空间是MyApp.Droid,且NLog.config放在项目根目录,资源全名就是MyApp.Droid.NLog.config;如果放在Assets文件夹下,全名则是MyApp.Droid.Assets.NLog.config。你可以通过以下代码输出所有嵌入资源名称,找到正确的那个:
var assembly = typeof(MainActivity).GetTypeInfo().Assembly; foreach (var resourceName in assembly.GetManifestResourceNames()) { Android.Util.Log.Debug("NLogResource", resourceName); }修正加载代码,指定完整资源名
在调用LoadConfigurationFromAssemblyResource时,传入正确的资源全名:var assembly = typeof(MainActivity).GetTypeInfo().Assembly; LogManager.Setup().LoadConfigurationFromAssemblyResource(assembly, "YourFullResourceName.NLog.config");检查嵌入资源属性设置
确保NLog.config的属性配置正确:- 生成操作:设为嵌入的资源
- 复制到输出目录:设为不复制
备选方案:直接从Assets文件夹加载
如果你不想用嵌入资源,也可以直接从Assets目录读取配置文件,这种方式更直观,无需关注命名空间:using (var configStream = Assets.Open("NLog.config")) { LogManager.Setup().LoadConfigurationFromStream(configStream); }此时需要确保NLog.config的属性设置为:
- 生成操作:AndroidAsset
- 复制到输出目录:如果较新则复制
确保加载时机正确
这段配置加载代码必须放在任何Logger初始化之前,比如在OnCreate方法的最开始执行,避免Logger提前初始化导致配置未生效。
内容的提问来源于stack exchange,提问作者CYL
相关产品推荐
相关产品推荐

