2015-04-01 2 views
2

Я регистрируюсь на ETW, используя EventSource. Мы используем .Net Framework 4.5.EventSource - Невозможно получить изменения подписи метода для применения

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

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

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

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

EDIT:

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

public void MyLogMethod(string name, int id) 

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

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

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

+0

, выпуск которого у вас есть? – magicandre1981

+0

@ magicandre1981 Я обновил свой вопрос, чтобы предоставить более подробную информацию. –

+0

Вы используете класс входящих сообщений из .net 4.5 или пакета NuGet? – magicandre1981

ответ

2

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

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

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

Смежные вопросы