EventSource - 无法获取要应用的方法签名更改

时间:2015-04-01 23:41:01

标签: c# .net etw-eventsource

我使用EventSource登录ETW。我们正在使用.Net Framework 4.5。

由于我处于开发的初期,我将在我的EventSource子类中经常更改方法签名。我真的不想每次做出改变时都要增加版本。版本只是一个字节,所以我很快就会用完版本。

有没有办法可以强制ETW识别签名更改而不添加/更改版本属性?

感觉它可能与清单文件的生成有关,但我无法真正找到关于如何在v4.5中完成此操作的大量信息。过去似乎需要手动生成清单文件,现在它以某种方式神奇地生成。

对此的任何帮助将不胜感激。

修改

当我更改签名时,日志仍然看起来像旧签名。例如,如果我的方法看起来像这样

public void MyLogMethod(string name, int id)

稍后,如果我想添加其他参数,例如

public void MyLogMethod(string name, int id, string message)

除非我增加Version属性,否则消息值不会显示在有效内容中。我希望ETW能够识别我更改的签名,而无需更改版本属性。

1 个答案:

答案 0 :(得分:2)

ETW是一种强类型的日志记录系统,而EventSource是在其上构建的.NET层。是的,现在EventSource会自动向ETW流注入自己的清单。但您必须使用通过Nuget Feed分发的the latest stable version。作为.NET 4.5的一部分的版本几乎没有错误,缺少一些功能。

最新版本的EventSource在启动期间以及每次创建新的ETL文件时都会向底层ETW提供程序发出清单信息。如果您正在使用Tx LINQpad driverSfvPerf,您可以看到记录的ETL文件中的第一个事件的事件ID等于64567(据我记得),这是一个EventSource系统事件,它还使用相同的ID来记录其错误消息,因此您可以检查它们以进行诊断。

Version属性的唯一目的是在多个客户端使用不同版本为同一个ETW提供程序提供服务时支持该方案,因此可以根据版本标记对结果跟踪事件进行反序列化。在您的情况下,保留与事件源的ETW清单的先前版本兼容性似乎不是一个问题。