Странная проблема с filepath в System.IO.FileInfo при использовании с log4net в приложении wpf - PullRequest
1 голос
/ 20 марта 2012

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

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

работает в приложении winforms Program.cs-> main (), но для версии wpf, где у меня есть свой собственный класс Startup со своим собственным Main () (вместо автоматически сгенерированного и скрытого main ()), я должен изменить строка выглядит следующим образом

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

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

Ответы [ 3 ]

2 голосов
/ 20 марта 2012

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

1 голос
/ 20 марта 2012

У dll log4net и xml есть копия в local = true.

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

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

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

0 голосов
/ 20 марта 2012

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

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

...