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 манифеста для вашего источника событий.