SLAB,进程外:更改事件源方法的签名会导致错误的事件记录

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再次测试,日志仍然显示不正确.看起来问题不在于记录事件,而在于阅读它们.

Ran*_*ica 5

我猜测事件源不会发布清单更改或SLAB无法识别更改.

请注意,只需更改看起来违反事件源版本控制规则的参数名称:"一旦添加具有特定有效负载属性集的事件,就无法重命名事件,删除任何属性或更改现有属性的含义". 但是,我可以看到,在接口正式化之前的开发中,这仍然会导致问题.

您还可以检查Path.GetTempPath()\ 7D2611AE-6432-4639-8B91-3E46​​EB56CADF \文件夹中的清单架构缓存文件夹.例如C:\ Users \\ AppData\Local\Temp\7D2611AE-6432-4639-8B91-3E46​​EB56CADF或者可能是C:\ Windows\ServiceProfiles\LocalService\AppData\Local\Temp\7D2611AE-6432-4639-8B91-3E46​​EB56CADF.

如果您在缓存中看到清单,则可以将其删除,以查看是否有助于获取最新更改.