我正在尝试为以下问题编写专有的分析器和代码修补程序。切记,这是我第一次使用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
指向不同上下文的正确方法是什么?有没有更好的方法来进行这种重构?