Не удается загрузить nlog.config в Xamarin - PullRequest
0 голосов
/ 03 апреля 2019

Я не могу прочитать nlog.config файл в папке ресурсов платформы Android

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

Как прочитать файл nlog, а также этот файл в активе Android.

Ответы [ 5 ]

1 голос
/ 04 апреля 2019

Вы также можете попробовать использовать этот файл ( nlog.config с действием сборки в качестве 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 голос
/ 03 апреля 2019

Вы также можете использовать ресурс 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

0 голосов
/ 05 апреля 2019

Спасибо за ваш ответ. Я решил эту проблему, установив autoReload = "false" throwExceptions = "false". Из-за этих двух мой конфигурационный файл не был виден. Я не знаю, как они влияют на видимость файла, но установив выше двух в ложь, я могу получить файл конфигурации сейчас Спасибо,

0 голосов
/ 03 апреля 2019

Для Xamarin Android "NLog.config" (в этом корпусе) в папке активов будет загружен автоматически.Если имя файла другое, используйте:

LogManager.Configuration = new XmlLoggingConfiguration("assets/someothername.config");
0 голосов
/ 03 апреля 2019

Вы можете добавить метод расширения к вашему классу контекста, который получит вам требуемый актив в виде потока:

 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.

Удачи

Возврат в случае запросов.

...