.NET Framework 4.6.2迁移x64后操作日志写入调试日志问题
.NET Framework 4.6.2 x64下EventSource写入Operational事件日志异常问题解决
问题现象
我在.NET Framework 4.6.2中基于EventSource类实现了事件日志写入功能,将应用从x86迁移至x64后,遇到以下行为差异:
- 写入Admin事件日志全程正常
- 写入Operational事件日志存在异常:
- x86版本:无论在Visual Studio中启动还是手动运行,均能正常写入Operational日志
- x64版本:在Visual Studio中启动正常,但手动运行时,Operational事件会被写入调试日志(仅启用调试日志时可见),且调试日志无有效输出内容
解决方法
通过显式调用EventSource带参数的构造函数,解决了该问题:
原代码
public static EventManager Log = new EventManager();
修改后代码
public static EventManager Log = new EventManager(false); public EventManager(bool throwOnEventWriteErrors) : base(throwOnEventWriteErrors) { }
其中EventManager是自定义的EventSource子类,包含Operational事件定义示例:
[Event(2, Message = "Operational Event", Level = EventLevel.Informational, Channel = EventChannel.Operational)] public void OperationalEvent() { WriteEvent(2); }
原因推测
虽然无法完全明确底层触发逻辑,但推测是显式传入throwOnEventWriteErrors参数并调用基类构造函数,触发了EventSource内部不同的初始化代码路径,从而绕过了x64环境下手动运行时的底层兼容性问题。
内容的提问来源于stack exchange,提问作者Leo D'Arcy
相关产品推荐
相关产品推荐

