gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:34 25 4
gpt4 key购买 nike

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

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

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

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

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

编辑:

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

public void MyLogMethod(string name, int id)

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

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

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

最佳答案

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

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

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

关于c# - EventSource - 无法获取要应用的方法签名更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com