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 на "Копировать всегда", и он должен идти туда, где вам это нужно.