文档的代码修复与行的代码修复不同

时间:2019-03-04 02:32:30

标签: codefixprovider

我编写了一个Roslyn代码分析器和相关的CodeFixProvider,该代码可以正常工作。当我对单个灯泡使用它时,它可以完美工作,当我选择处理整个文档时,它似乎正在损坏结果,就像将多个修复程序合并在一起一样。

我正在使用WellKnownFixAllProviders提供解决问题的基础结构。调试代码以及​​正在发生的一切看起来都不错,但是预览(并接受)的文档似乎有一些重复或损坏的结果。

1 个答案:

答案 0 :(得分:0)

WellKnownFixAllProvider的工作方式是并行批处理所有修订,并传递相同的,不变的文档。每个修订将单个更改的结果返回到原始文档,然后将这些更改的文档合并在一起以产生最终结果。这意味着,如果修复程序重叠,则合并会产生结果,如果按顺序对文档进行突变,则合并不会发生。

唯一真正的解决方法是要么没有重叠的修复程序,要么编写自己的fixallprovider,该插件按顺序运行而不是并行运行。

如果使用CodeFixProvider对您的代码库进行了一次更改,则可能会破解一种解决方法,使您的修复提供程序可以跟踪其更改并且不会产生冲突的更改。但这从本质上来说是脆弱的,并不是您想要为公众所用的修复程序所做的事情。