Ovi*_*aba 1 methods signature out-of-process slab
我为记录事件实现了一个事件源类.在多次更改记录事件的一种方法的签名(参数名称和参数类型)后,不再正确记录事件.例如,当记录事件时,不是使用当前参数名称设置Payload,而是使用用于先前版本方法的参数记录事件.例如:
方法的版本n:
[Event(5, Message = "Action: {0}",
Task = Tasks.PAGE,
Keywords = Keywords.USER_ACTION,
Level = EventLevel.Informational)]
public void LogAction(string action, string paramName)
{
this.WriteEvent(5, action, paramName);
}
Run Code Online (Sandbox Code Playgroud)
版本n + 1的方法:
[Event(5, Message = "Action: {0}",
Task = Tasks.PAGE,
Keywords = Keywords.USER_ACTION,
Level = EventLevel.Informational)]
public void LogAction(string action, string newParamName)
{
this.WriteEvent(5, action, newParamName);
}
Run Code Online (Sandbox Code Playgroud)
当为记录事件调用此方法时,将记录它们,并使用参数名称paramName而不是newParamName设置Payload值.
现在,问题是:如何清除"缓存",系统会忘记方法的旧版本,新方法可以正确记录事件?
LE:我用PerfView测试了日志记录.有趣的是,它正确地读取日志.我使用SemanticLogging-svc.exe再次测试,日志仍然显示不正确.看起来问题不在于记录事件,而在于阅读它们.
我猜测事件源不会发布清单更改或SLAB无法识别更改.
请注意,只需更改看起来违反事件源版本控制规则的参数名称:"一旦添加具有特定有效负载属性集的事件,就无法重命名事件,删除任何属性或更改现有属性的含义". 但是,我可以看到,在接口正式化之前的开发中,这仍然会导致问题.
您还可以检查Path.GetTempPath()\ 7D2611AE-6432-4639-8B91-3E46EB56CADF \文件夹中的清单架构缓存文件夹.例如C:\ Users \\ AppData\Local\Temp\7D2611AE-6432-4639-8B91-3E46EB56CADF或者可能是C:\ Windows\ServiceProfiles\LocalService\AppData\Local\Temp\7D2611AE-6432-4639-8B91-3E46EB56CADF.
如果您在缓存中看到清单,则可以将其删除,以查看是否有助于获取最新更改.