Я пытаюсь написать собственный анализатор и кодовое исправление для следующей проблемы.Не забывайте, что я впервые использую API Roslyn.Я с радостью приму любые общие советы и рекомендации.
Существует огромная кодовая база с тысячами классов и требованием для изменения иерархии наследования классов.Мне нужно изменить верхний базовый класс определенных цепочек наследования с 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
?Есть ли лучший способ сделать такой рефакторинг?