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

EventSource - Unable to get method signature changes to apply

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

由于我处于开发的初级阶段,我将经常更改我的 EventSource 子类中的方法签名。我真的不想每次进行更改时都必须增加版本。版本只有一个字节,所以我会很快 运行 出版本。

有没有一种方法可以强制 ETW 在没有 adding/changing Version 属性的情况下识别签名更改?

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

如有任何帮助,我们将不胜感激。

编辑:

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

public void MyLogMethod(string name, int id)

以后如果我想再添加一个参数,比如

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

除非我增加 Version 属性,否则消息值不会显示在有效负载中。我希望 ETW 无需更改 Version 属性即可识别我更改的签名。

ETW 是一个强类型日志系统,而 EventSource 是建立在它之上的 .NET 层。是的,现在 EventSource 正在自动将其自己的清单注入到 ETW 流中。但是您必须使用通过 Nuget 提要分发的 the latest stable version。作为 .NET 4.5 一部分的版本几乎没有错误并且缺少某些功能。

最新版本的 EventSource 会在启动期间和每次创建新的 ETL 文件时将清单信息发送到底层 ETW 提供程序中。如果您使用 Tx LINQpad driver or SfvPerf,您会看到记录的 ETL 文件中的第一个事件的事件 ID 等于 64567(据我所知),这是一个 EventSource 系统事件,它也使用相同的id 来记录它的错误消息,这样你就可以检查那些用于诊断目的。

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