EventSource - невозможно получить изменения подписи метода для применения

Я вхожу в ETW, используя EventSource. Мы используем.Net Framework 4.5.

Поскольку я нахожусь в зачаточном состоянии разработки, я буду часто менять сигнатуры методов в моем подклассе EventSource. Я действительно не хочу увеличивать версию каждый раз, когда я делаю изменения. Версия только байтовая, поэтому у меня очень быстро закончатся версии.

Есть ли способ заставить ETW распознавать изменения подписи без добавления / изменения атрибута Version?

Такое ощущение, что это может быть связано с генерацией файла манифеста, но я не могу найти много информации о том, как это делается в v4.5. Кажется, в прошлом файл манифеста нужно было создавать вручную, а теперь он каким-то волшебным образом.

Любая помощь по этому вопросу будет принята с благодарностью.

РЕДАКТИРОВАТЬ:

Когда я меняю подпись, журнал все равно выглядит как старая подпись. Например, если мой метод выглядит так

public void MyLogMethod(string name, int id)

Позже, если я захочу добавить другой параметр, такой как

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

значение сообщения не отображается в полезной нагрузке, пока я не увеличу атрибут Version. Я хочу, чтобы ETW распознал мою измененную подпись, не меняя атрибут Version.

1 ответ

Решение

ETW - это система регистрации строго типов, а EventSource - это уровень.NET, построенный на ее основе. Да, в настоящее время EventSource автоматически внедряет в поток ETW свой собственный манифест. Но вы должны использовать последнюю стабильную версию, распространяемую через канал Nuget. Версия, входящая в состав.NET 4.5, содержит мало ошибок и не обладает некоторыми функциями.

Последняя версия EventSource отправляет информацию о манифесте в базовый поставщик ETW во время запуска и каждый раз, когда создается новый файл ETL. Если вы используете драйвер Tx LINQpad или SfvPerf, вы можете увидеть, что первое событие (я) в записанном файле ETL имеет идентификатор события, равный 64567 (насколько я помню), который является системным событием EventSource, он также использует тот же id для регистрации сообщений об ошибках, чтобы вы могли проверить их в диагностических целях.

Единственная цель атрибута Version - поддержать сценарий, когда несколько клиентов используют разные версии для подачи в один и тот же провайдер ETW, поэтому события трассировки результатов могут быть потенциально десериализованы на основе тега версии. В вашем случае, похоже, не является проблемой сохранение совместимости между предыдущими версиями ETW манифеста для вашего источника событий.

Другие вопросы по тегам