之前我在winforms中使用过log4net。第一次使用wpf控制台应用程序。控制台显示,控制台appender的工作方式与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都在winforms和wpf中复制到local = true。谢谢
答案 0 :(得分:2)
请比较两个不同程序中Environment.CurrentDirectory的值。你可能会发现它们是不同的。路径“log4config.xml”是相对于当前目录的,而不是相对于程序exe。
答案 1 :(得分:1)
log4net dll和xml都复制到local = true。
该语法适用于log4net.dll,但对于log4config.xml文件,它应该有一个名为“复制到输出目录”的属性,该属性具有“不复制”选项,“如果更新则复制”和“始终复制” ”。
当你运行它时,log4config.xml是否实际存在于.. \ bin \ debug或.. \ bin \ release文件夹中,如果是,它是否是该文件的正确版本。?
正如Shrieks所说,这可能不是log4net问题,因为log4net 应该只是使用已经创建并传递给它的FileInfo对象的FullName属性。
答案 2 :(得分:0)
FileInfo对象在传递给该函数之前已解析。
因此,它在不同的应用程序类型(Winforms& WPF)中表现不同的事实是一个红色的鲱鱼。主要问题是FileInfo类的Path属性解析为什么值。