C# 为什么EventRecord.FormatDescription()返回null?

C# 为什么EventRecord.FormatDescription()返回null?,c#,.net,event-log,C#,.net,Event Log,使用System.Diagnostics.Eventing.Reader.EventLogQuery从Windows事件日志读取事件时,EventRecord.FormatDescription()方法有时返回null。为什么会这样?在事件查看器中,有一些关于事件的消息返回null。这是由于.NET framework中的错误造成的 基本上,您需要做的是将CurrentCulture设置为“en US” 示例: var beforeCulture = Thread.CurrentThread.C

使用
System.Diagnostics.Eventing.Reader.EventLogQuery
从Windows事件日志读取事件时,
EventRecord.FormatDescription()
方法有时返回null。为什么会这样?在事件查看器中,有一些关于事件的消息返回null。

这是由于.NET framework中的错误造成的

基本上,您需要做的是将CurrentCulture设置为“en US”

示例:

var beforeCulture = Thread.CurrentThread.CurrentCulture;

try
{
  Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

  using (var session = new EventLogSession(ipOrAddress, userDomain, username, password, SessionAuthentication.Default))
  {
    var query = new EventLogQuery("System", PathType.LogName, queryString)
      {
        ReverseDirection = true,
        Session = session
      };

    using (var reader = new EventLogReader(query))
    {
      for (var record = reader.ReadEvent(); record != null; record = reader.ReadEvent())
      {
        // Read event records
        string message = record.FormatDescription();
      }
    }
  }
}
finally
{
  Thread.CurrentThread.CurrentCulture = beforeCulture;
}
这个解决方法很难找到,所以我想我会把它记录在一个地方,在那里它会被谷歌索引。我在一个旧的窗口中找到它,但它已关闭,状态为“不会修复”

更新:
该缺陷也已修复,状态为“发送给工程团队考虑”,并有评论暗示该缺陷可能会在下一个主要的.NET framework版本(v5)中修复。

因此我也为此挣扎了几天。我无法通过改变文化让它发挥作用。最后,我只使用了事件记录的Properties属性中的原始数据。信息数据在那里,只是不好看。(刚好满足我的审计需求:-)

最后一个
Thread.CurrentThread.CurrentCulture=new CultureInfo(“en-US”)应该是
Thread.CurrentThread.CurrentCulture=beforeCulture恢复以前的区域性,对吗?2014年.NET 4.5上的问题仍然相同。但是,查看
FormatDescription
的源代码,似乎是执行格式化的本机调用。因为事件日志消息可以本地化,所以线程的当前区域性和事件源的区域设置之间可能存在一些相互作用。然而,从.NET的角度来看,行为只是令人困惑。