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

升级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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:55:24