Make файл NLog.config загружает файл из (d:\dev) вместо "\ bin\debug \"

Я использовал Nlog для назначения журналов в определенной DLL. DLL затем используется в другом приложении (динамически загружается с помощью System.Reflection.Assembly.LoadFrom(path + a.dll)). Я вручную разместил файлы Nlog.dll и Nlog.config в папке Path, и приложение выполняется правильно, но оно не регистрирует никаких сообщений.

Однако, когда я перехожу и размещаю файл Nlog.config вручную в каталоге приложения (\bin\debug\), это сообщения журналов.

Может ли кто-нибудь дать мне знать, как указать местоположение поиска для Nlog.Config в другой каталог (d:\dev), отличный от \bin\debug\.

Ответ 1

Ниже показано, как я изменил конфигурацию Nlog, чтобы указать файл Nlog.config, присутствующий в папке "Выполнение сборки".

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(assemblyFolder + "\\NLog.config", true);

Ответ 2

См. Расположение файлов конфигурации в вики NLog.

В основном способы, которыми NLog находит конфигурацию:

  • стандартный файл конфигурации приложения (обычно applicationname.exe.config)
  • applicationname.exe.nlog в каталоге приложений
  • NLog.config в каталоге приложений
  • NLog.dll.nlog в каталоге, где находится NLog.dll(только если NLog не находится в GAC)
  • имя файла, указанное переменной среды NLOG_GLOBAL_CONFIG_FILE (если определено, только NLog 1.0 - поддержка удалена в NLog 2.0)

Нет другого способа сделать это.

Ответ 3

Я обнаружил, что

NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(logFilePath, true);

фактически указывает регистратор на файл, который должен быть зарегистрирован, а не файл конфигурации. Самое замечательное в этом состоит в том, что вы можете определить путь к файлу журнала, не требуя знать ExecutingAssembly - это особенно полезно при использовании ExcelDNA и т.д., Поскольку XLL динамически загружает сборки в виде потока битов, и поэтому

Assembly.GetExecutingAssembly().Location

генерирует исключение.

Ответ 4

Конфигурация NLog должна находиться в папке, где выполняется приложение, динамически вытаскивающее a.dll. Если вы отлаживаете, именно поэтому он работает, когда вы кладете его в bin\debug. Если вы используете Visual Studio, попробуйте настроить nlog.config на "Копировать всегда", и он должен идти туда, где вам это нужно.