Я выбрал путь Аддина. Я создал надстройку, которая слушает: BuildEvents.OnBuildBegin
Всякий раз, когда происходит это событие, я создаю список всех проектов в текущем решении. Выполните небольшой рекурсивный поиск, поскольку есть также папки Solution, которые немного усложняют жизнь в мире DTE.
Затем я перебираю все проекты и преобразую их в VSProject, чтобы я мог перебрать все ссылки.
Каждый раз, когда я сталкиваюсь с неверной ссылкой, я создаю ErrorTask, в котором для свойства Document устанавливается полный путь решения этой ссылки. Для этого я строю путь к проекту, в котором находится эта ссылка, вплоть до корня решения.
ErrorTask затем отправляется в созданный мной класс ErrorListHelper, который обрабатывает ErrorTasks, а также выполняет навигацию.
Если я закончил со всеми проектами и обнаружил какие-либо ошибки, я отменяю текущую сборку и показываю окно Список ошибок, где мой ErrorListHelper содержит все созданные мной ссылочные ошибки.
Всякий раз, когда я хочу перейти к рассматриваемой ссылке, я активирую окно обозревателя решений и получаю его корень с помощью UIHierarchy.
Затем я иду по корню вниз, шаг за шагом, используя UIHierarchy, чтобы добраться до UIHierarchyItems и развернуть их. Пока я не достигну самого глубокого уровня (ссылки) и не выберу это.
Так как он мне нужен только для определенного решения и в рамках этого решения для определенных проектов (.Views. * И .ViewModels. *), У меня также есть некоторые проверки для тех, которые существуют во время создания списка ошибок.
Работает как шарм, уже нашли 12 "неправильных" ссылок в 35 проектах, где я считал, что все хорошо.