У меня был некоторый код ETW в PCL, на который ссылаются и используется в приложении Windows 8.1, которое работает в течение нескольких месяцев. В частности, эта строка кода:ETW - Windows 8.1 - EventWrittenEventArgs Полезная нагрузка Отсутствующие данные
WriteEvent((int)errorId, message, (useSysLog ? sysLogErrorId : SysLogSeverity.NotSpecified));
посылала массив объектов в Payload
собственности EventWrittenEventArgs
в моей OnEventWritten
функции моего EventListener
.
Я хотел бы получить Payload
с Count
2 и будет содержать string
и SysLogSeverity
экземпляр.
Я недавно обновил свою Visual Studio до 2015 года, и теперь мой Payload
содержит только одно свойство - string
. SysLogSeverity
больше не проходит через OnEventWritten
.
Могла ли модернизация VS2015 быть моей проблемой? Библиотека, в которой установлен код ETW, не изменилась при обновлении. Я проверил историю git моего проекта, и никакие версии сборки не изменились.
Я в недоумении, почему это происходит, и действительно оценил бы любые идеи относительно того, как отлаживать это/что может происходить.
Update:
Вот что мой вспомогательный метод выглядит, что это вызов WriteEvent
функции:
[NonEvent]
private void _WriteEvent(int errorId, string message, SysLogSeverity sysLogSeverity)
{
if (_errorLevelsMap.ContainsKey((ErrorIds)errorId))
{
sysLogSeverity = _errorLevelsMap[(ErrorIds)errorId];
}
if (this.IsEnabled())
{
WriteEvent((int)errorId, message, sysLogSeverity);
}
}
Вот определение _errorLevelsMap:
private readonly Dictionary<ErrorIds, SysLogSeverity> _errorLevelsMap = new Dictionary<ErrorIds, SysLogSeverity>
{
{ ErrorIds.Critical, SysLogSeverity.Critical },
{ ErrorIds.Error, SysLogSeverity.Error },
{ ErrorIds.Informational, SysLogSeverity.Informational },
{ ErrorIds.Verbose, SysLogSeverity.Debug },
{ ErrorIds.Warning, SysLogSeverity.Warning }
};
подписей матча и до сих пор , Payload
содержит только message
; а не sysLogErrorId
.
Спасибо!
О, мой. Это очень интересно. В настоящее время подписи не совпадают. Я попробую это немного. Знаете ли вы, что это новое требование? –
Я никогда не использовал внутренний EcentSource .net. Я всегда использовал версию NuGet, и здесь она всегда требовалась. https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource – magicandre1981
Я забыл упомянуть, что код ETW находится в PCL; Я не могу использовать пакет nuget. Я обновлю OP. –