2012-03-19 3 views
1

Я раньше использовал log4net в winforms. Первый раз с использованием консольного приложения wpf. Появится консоль, и консольный appender работает точно так же, как в приложении winforms. Однако в winforms мне никогда не приходилось давать полный путь к файлу log4net xml. Он расположен в том же месте, где находятся все файлы cs. (Место по умолчанию, где VS 2010 ставит все свои исходные файлы. ТакПроблема с файловой системой Weird с System.IO.FileInfo при использовании с log4net в приложении wpf

XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("log4config.xml")); 

работает в Program.cs- приложение WinForms в> Основной(), но для версии МОФ, где у меня есть свой собственный класс запуска с моим собственным Main() (вместо автоматически генерируемый и скрытый основной()) Я должен изменить линию, чтобы посмотреть, как этот

XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(@"c:\fullpath\log4config.xml")); 

Это заняло у меня некоторое время, чтобы прибить, так что я подумал, что это может быть полезным, чтобы понять, почему это Я знаю, что я использую log4net ver 1.2.10.0. В log4net dll и xml есть экземпляр для local = true в winforms и wpf. спасибо

ответ

1

Идентификатор dll log4net и xml имеют копию на локальную = true.

Этот синтаксис применяется к log4net.dll, но для файла log4config.xml, он должен иметь свойство «Копировать в выходной каталог», который имеет опции «Не копировать», «Копировать, если новее» и «Копировать всегда».

Когда вы запустите его, действительно ли файл log4config.xml существует в папке .. \ bin \ debug или .. \ bin \ release, и если да, то это правильная версия файла.?

Как сказал Shrieks, это, вероятно, не проблема log4net, так как log4net должен просто использовать свойство FullName объекта FileInfo, который был создан и передан ему.

+1

Он был установлен для копирования всегда, но VS не действительно копировал xml-файл в выходную папку. Thx для указания меня в правильном направлении. Модератор, пожалуйста, удалите это, если вы думаете, что мой вопрос - это дубликат. Этот вопрос объясняет, почему это происходит. http://stackoverflow.com/questions/2619547/i-added-a-new-xml-file-to-my-solution-but-when-i-press-f5-to-test-it-i-cant- fi – Gullu

+0

В основном для копирования всегда для работы с XML-файлами, действие сборки должно быть установлено в «Содержимое», – Gullu

2

Пожалуйста, сравните значения Environment.CurrentDirectory в двух разных программах. Вероятно, вы обнаружите, что они разные. Путь «log4config.xml» относится к текущему каталогу, а не к программе exe.

+0

Environment.CurrentDirectory такой же как в wpf, так и в winforms. т.е. c: \ .... \ bin \ debug или bin \ release в зависимости от типа сборки. Это страннее, чем я думал. спасибо – Gullu

0

Объект FileInfo решается до его передачи в эту функцию.

Так что факт, что он ведет себя по-разному в разных типах приложений (Winforms & WPF) - это красная селедка. Основная проблема заключается в том, какое значение имеет свойство Path для класса FileInfo.

+0

FileInfo принимает относительное имя файла или fqn. Однако для winforms он выглядит относительно правильно. thx – Gullu

 Смежные вопросы

  • Нет связанных вопросов^_^