通过诊断传递序列化数据的危险是什么(如果有的话)?

What, if any, are the dangers of passing serialized data through a diagnostic?

创建诊断允许您使用自定义数据传入 Dictionary<string, string>。之后,您可以在任何读取诊断的内容中使用它来提供上下文信息。它可用的典型场景是分析器和代码修复之间。

这种传递数据的方法有多可靠?有什么特别的注意事项吗?

我记得几个月前关于这个主题的讨论,当时有人提出对可串行化的担忧作为不提供此类功能的理由。想到的另一件事是竞争条件的可能性(根据分析器的过时信息进行代码修复),但我质疑这种可能性有多大(或者是否可能)。更改语法树时应取消诊断,但我不知道这是否会传播到代码修复。

a specific example:我正在做一些技巧来发现两件事:参数名称和位置。在分析器中,此位置用于显示波浪下划线,而参数用于创建新调用。 我没有计算两次参数名称和位置,而是通过 properties 参数传递它们,然后使用分析器中确定的位置从代码修复中检索受影响的节点。

只要系统中存在诊断,这些属性就会得到维护。因此您可以依赖从分析器输入的数据。

但话虽如此,如果可能的话,避免使用 属性 包对用户来说会更好。

这些 pre-computed 诊断是在没有用户交互的情况下生成的,并保存在系统中用于整个解决方案,因此每个诊断的那些额外信息确实加起来了。 (基本消耗资源)

与诊断相比,修复程序只会 运行 当有明确的用户操作时并且只有 运行 少量修复程序(通常适用于插入符号所在的行)

所以将一些数据放入诊断中只是为了让修复程序更快一点(如果加速很明显,那么你可能有理由)就像在每次系统重启时加载控制面板以加快首次启动时间以防万一可以在关闭机器前使用控制面板。