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

Methods SLAB,进程外:更改事件源方法的签名会导致错误的事件日志记录,methods,signature,out-of-process,slab,Methods,Signature,Out Of Process,Slab,我实现了一个用于记录事件的事件源类。重复更改记录事件的一个方法的签名(参数名称和参数类型)后,事件将不再正确记录。例如,当记录一个事件时,不使用当前参数名称设置有效负载,而是使用用于该方法早期版本的参数记录事件。例如: 方法的版本n: [Event(5, Message = "Action: {0}", Task = Tasks.PAGE, Keywords = Keywords.USER_ACTION, Level = EventLevel.Informatio

我实现了一个用于记录事件的事件源类。重复更改记录事件的一个方法的签名(参数名称和参数类型)后,事件将不再正确记录。例如,当记录一个事件时,不使用当前参数名称设置有效负载,而是使用用于该方法早期版本的参数记录事件。例如:

方法的版本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);
    }
    [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);
    }
方法的版本n+1:

    [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);
    }
    [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);
    }
当为记录事件调用此方法时,将使用参数名称paramName而不是newParamName设置有效负载值来记录这些事件

现在的问题是:如何清除“缓存”,以便系统忘记旧版本的方法,而新方法可以正确记录事件


LE:我用PerfView测试了日志记录。有趣的是,它能正确读取日志。我用semanticulling-svc.exe再次测试,日志仍然显示不正确。看起来问题不在于记录事件,而在于读取事件。

我们遇到了同样的问题。我们通过为每个新部署重新命名EventSource,并在其末尾添加版本号来“解决”它。我相信这是在某个阶段会解决的问题。

我们遇到了同样的问题。我们通过为每个新部署重新命名EventSource,并在其末尾添加版本号来“解决”它。我确信这将在某个阶段得到修复。

我猜事件源没有发布清单更改,或者SLAB没有识别更改

请注意,只需更改看起来违反事件源版本控制规则的参数名:但是,我可以看到,在接口正式化之前的开发中,这仍然会导致问题

您还可以检查路径.GetTempPath()\7D2611AE-6432-4639-8B91-3E46EB56CADF\文件夹中的清单架构缓存文件夹。e、 g.C:\Users\\AppData\Local\Temp\7D2611AE-6432-4639-8B91-3E46EB56CADF,或者C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\7D2611AE-6432-4639-8B91-3E46EB56CADF


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

我猜事件源没有发布清单更改,或者SLAB没有识别这些更改

请注意,只需更改看起来违反事件源版本控制规则的参数名:但是,我可以看到,在接口正式化之前的开发中,这仍然会导致问题

您还可以检查路径.GetTempPath()\7D2611AE-6432-4639-8B91-3E46EB56CADF\文件夹中的清单架构缓存文件夹。e、 g.C:\Users\\AppData\Local\Temp\7D2611AE-6432-4639-8B91-3E46EB56CADF,或者C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\7D2611AE-6432-4639-8B91-3E46EB56CADF

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