【问题标题】:Weird filepath issue with System.IO.FileInfo when used with log4net in a wpf app在 wpf 应用程序中与 log4net 一起使用时 System.IO.FileInfo 出现奇怪的文件路径问题
【发布时间】:2012-03-19 20:07:42
【问题描述】:

我之前在winforms中使用过log4net。第一次使用 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 版本 1.2.10.0。 log4net dll 和 xml 在 winforms 和 wpf 中都有 copy to local = true 。谢谢你

【问题讨论】:

    标签: c# wpf vb.net log4net log4net-configuration


    【解决方案1】:

    请比较两个不同程序中 Environment.CurrentDirectory 的值。您可能会发现它们是不同的。路径“log4config.xml”是相对于当前目录的,而不是相对于程序exe的。

    【讨论】:

    • Environment.CurrentDirectory 在 wpf 和 winforms 中是相同的。即,c:\....\bin\debug 或 bin\release 取决于构建类型。这比我想象的更奇怪。谢谢
    【解决方案2】:

    log4net dll 和 xml 都有 copy to local = true。

    该语法适用于 log4net.dll,但对于 log4config.xml 文件,它应该有一个名为“复制到输出目录”的属性,其中包含“不复制”、“如果较新则复制”和“始终复制”选项'。

    当您运行它时,log4config.xml 是否确实存在于 ..\bin\debug 或 ..\bin\release 文件夹中,如果存在,它是文件的正确版本吗?

    正如 Shrieks 所说,这可能不是 log4net 问题,因为 log4net 应该只是使用已创建并传递给它的 FileInfo 对象的 FullName 属性。

    【讨论】:

    • 它被设置为始终复制,但 VS 并没有真正将 xml 文件复制到输出文件夹。感谢您为我指明了正确的方向。如果您认为我的问题是重复的,请版主删除此内容。这个问题解释了为什么会这样。 stackoverflow.com/questions/2619547/…
    • 基本上复制总是适用于 xml 文件,构建操作必须设置为“内容”
    【解决方案3】:

    FileInfo 对象在传递给该函数之前被解析。

    因此,它在不同的应用程序类型(Winforms 和 WPF)中表现不同的事实是一个红鲱鱼。主要问题是 FileInfo 类的 Path 属性解析为什么值。

    【讨论】:

    • FileInfo 采用相对文件名或 fqn。然而,对于 winforms,它似乎从正确的位置看起来相对。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2016-07-27
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多