Roslyn:如何在不同项目的上下文中进行代码修复?

时间:2018-11-22 11:24:50

标签: c# roslyn roslyn-code-analysis codefixprovider

我正在尝试为以下问题编写专有的分析器和代码修补程序。切记,这是我第一次使用Roslyn API。我会很乐意接受任何一般性的提示和建议。

庞大的代码库包含成千上万个类,并且需要更改类继承层次结构。我需要将某些继承链的顶级基类从System.Object更改为System.MarshalByRefObject。 问题在于,是否需要在子类之一中进行更改。 AnalyzeSymbol方法通过SymbolAnalysisContext传递,该方法指向一个子类,但其他位置需要代码修复。

我试图将基类声明的位置作为AdditionalLocations属性传递给我报告的Diagnostic。这行得通。我可以在CodeFixProvider端检索此位置,但前提是该位置在同一项目中。如果基类的声明在大多数情况下都在不同的项目中,则AdditionalLocations属性为空。

代码示例:
分析器会标记派生类,此处的假原因是接口IVisible

// Project A
class BaseClass
{
    ...
}


// Project B
class DerivedClass : BaseClass, API.IVisible
{
    ...
}

预期的代码修复是这样的:

// Project A
class BaseClass : System.MarshalByRefObject
{
    ...
}


// Project B
class DerivedClass : BaseClass, API.IVisible
{
    ...
}

CodeFixProvider指向不同上下文的正确方法是什么?有没有更好的方法来进行这种重构?

0 个答案:

没有答案