C# log4net DLL损坏(设置为全零)

C# log4net DLL损坏(设置为全零),c#,.net,windows-services,log4net,corruption,C#,.net,Windows Services,Log4net,Corruption,我们最近开始看到一个问题,log4net.dll已损坏-具体来说,它的大小正确,但包含所有零。这会导致BadImageFormatException(最终包装为TypeInitializationExceptions,因为我们倾向于在每个类中静态初始化ILog实例)。这种情况偶尔发生,没有明显的模式。卸载并重新安装我们的应用程序似乎可以“修复”它,因为我们还没有在同一台机器上两次看到这个问题——但这可能只是巧合 我们的应用程序由一个Windows服务和一个通过命名管道进行通信的“常规”Windo

我们最近开始看到一个问题,log4net.dll已损坏-具体来说,它的大小正确,但包含所有零。这会导致BadImageFormatException(最终包装为TypeInitializationExceptions,因为我们倾向于在每个类中静态初始化ILog实例)。这种情况偶尔发生,没有明显的模式。卸载并重新安装我们的应用程序似乎可以“修复”它,因为我们还没有在同一台机器上两次看到这个问题——但这可能只是巧合

我们的应用程序由一个Windows服务和一个通过命名管道进行通信的“常规”Windows应用程序组成(没有什么特别之处)。我们已经在常规应用程序中使用log4net很长时间了(在我加入项目之前),但直到最近才将log4net添加到服务中。我们在两个应用程序中使用相同的机制对其进行初始化,具体如下:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
我们通常在每个类中静态实例化ILog实例,即:

private static readonly ILog _log = LogManager.GetLogger(typeof (SomeClass));
到目前为止,我们已经考虑了以下问题,但没有任何确凿证据得出结论:

  • 安装程序问题。我们使用的是一个非常标准的MSI安装程序,这个文件只是作为安装的一部分被正常复制。这不是复制的第一个或最后一个文件。此外,我们还看到至少有一个实例在安装后一天左右才出现问题(而大多数情况都发生在安装后不久或立即)。然而,我们最近清理了安装程序,所以那里有一些变化(不幸的是,我不能详细地告诉他们,因为安装工作是由其他人完成的,MSI不是我非常熟悉的东西)

  • 与防病毒软件的交互。我们在(4-5)上看到的所有机器都有相同的AV软件(Sophos),但在任何Sophos日志中都没有显示log4net被标记或隔离

  • 与在Windows服务应用程序中使用log4net相关的内容

  • 正如你所看到的,我们有理由怀疑1号和2号,但还没有排除任何可能性,也没有多少证据支持或反对3号。由于这是我们在服务中使用log4net的第一个版本,我们现在看到DLL被破坏显然是可疑的-但是我们的开发人员、QA和beta测试人员在出现这种情况之前的几周内使用了该版本的早期迭代,因此,就变化的时间而言,没有明显的相关性

    我们还尝试了自动化卸载/重新安装过程,以反复运行,看看是否可以摆脱任何问题(数千次安装后没有任何问题)。我们办公室的所有用户都在运行ProcMon,因此,如果我们再次看到它,我们就有希望看到哪些内容与文件有关,但这意味着目前我们正在等待

    任何关于我们如何能更明确地排除一些可能的原因的想法,或者从专门看到这个问题的人那里得到的任何信息,都将不胜感激

    更新: 我们最近没有看到这么多,尽管这可能至少部分是由于安装程序的使用率较低。但是,我们最近做的一个关键更改是关闭服务应用程序的发布者证据(请参见此处:)

    我们做了这个更改(正如上面链接为服务应用程序推荐的那样),以缩短启动时间,因为我们偶尔会看到服务超时和无法启动。但是,自从我们进行了此更改之后,我们还没有看到log4net.dll损坏问题。是否有可能通过禁用此功能,我们绕过了可能会损坏log4net.dll(这是一个强名称程序集)的某种操作?我们不想仅仅因为几个星期没有看到它就认为我们已经解决了这个问题,因为我们没有任何确凿的证据,因此这可能只是巧合


    同样,如果您有任何想法,我们将不胜感激。

    您可以尝试一件事:将DLL安装到GAC中,看看它是否被损坏…@Yahia:谢谢您的建议,我们最终可能会走这条路。唯一的问题是,它的发生是如此随机,以至于我们没有一个确定的测试来确定它是否被修复——我们基本上只能等待,看看它是否停止发生。仍然希望有人能对正在发生的事情有所了解……我们的产品也是一个windows服务,带有命名管道等。我们也很少看到这个问题(两次,每次都是从一个站点的许多相同图像中随机抽取一些机器)。在每种情况下,我们实际上都有从dll中写入的日志,在某个东西将dll归零之前很短一段时间,因此这不是安装/更新过程。log4net本身也没有问题,因为我们的一些其他DLL已归零。倾向于反病毒,其中一个有Sophos,另一个有McAffee