无法在Xamarin中加载nlog.config

时间:2019-04-03 06:30:00

标签: c# android xamarin logging nlog

我无法读取android平台资产文件夹中的 nlog.config 文件

NLog.LogManager.Configuration = new XmlLoggingConfiguration("NLog.config");

如何读取nlog文件,并且该文件也位于android资产中。

5 个答案:

答案 0 :(得分:1)

您还可以尝试将此( nlog.config 文件与Build Action一起用作AndroidAsset):

NLog.LogManager.Configuration = new XmlLoggingConfiguration (XmlTextReader.Create(Assets.Open ("NLog.config")), null);

指的是: https://github.com/NLog/NLog/blob/master/src/NLog/Config/LoggingConfigurationFileLoader.cs#L101-L120

答案 1 :(得分:0)

您可以在上下文类中添加扩展方法,以将所需的资产作为流获取:

 public static class Utils
 {
   public static Stream GetFromAssets(this Context context, string assetName)
    {
        AssetManager assetManager = context.Assets;
        Stream inputStream;
        try
        {
            using (inputStream = assetManager.Open(assetName))
            {
                return inputStream;
            }

        }
        catch (Exception e)
        {
            return null;
        }
    }
 }

然后在您的活动上下文中按以下方式访问它:

var Asset= context.GetFromAssets("AssetName");

请注意,这将返回System.IO.Stream。

祝你好运

在查询的情况下还原。

答案 2 :(得分:0)

对于Xamarin,资产文件夹中的Android“ NLog.config”(在此情况下)将自动加载。如果文件名不同,请使用:

LogManager.Configuration = new XmlLoggingConfiguration("assets/someothername.config");

答案 3 :(得分:0)

您还可以使用Xamarin资源。将NLog.config文件放入库项目中,然后编辑文件的属性-将生成操作更改为嵌入式资源。

public static Stream GetEmbeddedResourceStream(Assembly assembly, string resourceFileName)
{
  var resourcePaths = assembly.GetManifestResourceNames()
    .Where(x => x.EndsWith(resourceFileName, StringComparison.OrdinalIgnoreCase))
    .ToList();
  if (resourcePaths.Count == 1)
  {
    return assembly.GetManifestResourceStream(resourcePaths.Single());
  }
  return null;
}

var nlogConfigFile = GetEmbeddedResourceStream(myAssembly, "NLog.config");
if (nlogConfigFile != null)
{
    var xmlReader = System.Xml.XmlReader.Create(nlogConfigFile);
    NLog.LogManager.Configuration = new XmlLoggingConfiguration(xmlReader, null);
}

另请参阅:https://github.com/NLog/NLog/wiki/Explicit-NLog-configuration-loading#loading-nlog-configuration-from-xamarin-resource

答案 4 :(得分:0)

感谢您的回复。我通过设置autoReload =“ false” throwExceptions =“ false”解决了此问题。由于这两个原因,我的配置文件不可见。我不知道它们如何影响文件的可见性,但将以上两个设置为false我现在可以获取配置文件 谢谢,