Создание визуализаторов отладчика Visual Studio с использованием расширяемости VS 2022

Вопрос или проблема

Я пытаюсь написать визуализатор отладки для VS2022, используя новую модель расширяемости.

В общем, Microsoft предоставила образцы и некоторую документацию, однако я не могу выяснить, как реализовать, загрузить и отладить мой класс, производный от VisualizerObjectSource.

Цель визуализатора – контейнер Windsor, меня интересует конкретное содержимое внутри контейнера. Таким образом, решение выглядит следующим образом:

Первый проект – это проект расширения .net 8. Проект содержит расширение и класс, который наследует от DebuggerVisualizerProvider. Проект содержит папку net4.6.2 (я также пробовал net2.0), в которой находится сборка WindsorVisualizerObjectSource. Я проверил, что папка была создана в папке расширений и содержит сборку.

Второй проект – это проект .net framework 4.8 для стороны отлаживаемого приложения. (4.8 используется, потому что он должен ссылаться на определенные типы в контейнере.) Сборка отлаживаемого приложения содержит WindsorVisualizerObjectSource для пользовательской сериализации, которая указывается в WindsorVisualizerProvider путем переопределения DebuggerVisualizerProviderConfiguration.

При запуске в экспериментальном экземпляре VS во время попытки визуализации расширение загружается и останавливается на точке останова в методе CreateVisualizerAsync. С этого момента оно не работает так, как ожидалось. Похоже, что DebuggerVisualizerProviderConfiguration никогда не считывается, visualizerTarget.ObjectSource не выглядит как WindsorVisualizerObjectSource. Точки останова в WindsorVisualizerObjectSource никогда не срабатывают. Другими словами, сборка WindsorVisualizerObjectSource никогда не загружается.

Требуется ли сборке со стороны отлаживаемого приложения .netstandard? Как её следует развернуть? Как её можно отлаживать?

Есть ли идеи или примеры для реализации?

Спасибо

Ответ или решение

Создание визуализаторов для отладки в Visual Studio 2022 с использованием модели расширяемости может показаться сложной задачей. В данном ответе мы рассмотрим важные шаги и детали, необходимые для успешной реализации вашего визуализатора, специально для контейнера Windsor.

1. Подготовка проекта

Ваш проект должен состоять из двух основных частей:

  • Расширение для Visual Studio (.NET 8)
  • Debuggee-часть (.NET Framework 4.8)

Ваша структура проекта звучит правильно, но убедитесь, что вы придерживаетесь следующих рекомендаций:

  1. Проект расширения:

    • В проекте .NET 8 создайте класс, который наследует DebuggerVisualizerProvider.
    • В этом классе вы должны переопределить метод CreateVisualizerAsync, который должен возвращать ваш объект, производный от VisualizerObjectSource.
  2. Проект Debuggee:

    • Убедитесь, что ваш проект на .NET Framework 4.8 правильно ссылкует на любые необходимые библиотеки, включая интерфейсы Windsor.

2. Настройка DebuggerVisualizerProviderConfiguration

Проблема, с которой вы столкнулись, может быть связана с неправильной настройкой DebuggerVisualizerProviderConfiguration. Убедитесь, что вы правильно указали тип возвращаемого объекта. Ваш класс WindsorVisualizerObjectSource должен быть зарегистрирован в методе DebuggerVisualizerProviderConfiguration:

protected override void ConfigureDebuggerVisualizerProvider(DebuggerVisualizerProviderConfiguration configuration)
{
    configuration.AddVisualizer(typeof(YourType), typeof(WindsorVisualizerObjectSource));
}

3. Загрузка вашего WindsorVisualizerObjectSource

Для того чтобы ваш WindsorVisualizerObjectSource загружался, он должен быть доступен в окружении отладки. Убедитесь, что:

  • Вы правильно указываете путь к сборке в файле проекта.
  • Сборка действительно находится в указанной папке и совпадает по версии.
  • Сборка содержит необходимые зависимости и правильно скомпилирована для использования в .NET Framework.

4. Дебаггинг и начальная отладка

Чтобы отлаживать ваш визуализатор, используйте Debug -> Start Debugging в вашем экспериментальном экземпляре Visual Studio. Убедитесь, что у вас выставлены все точки останова в методах вашего визуализатора (включая CreateVisualizerAsync и методы вашего WindsorVisualizerObjectSource).

Если точки останова не срабатывают:

  1. Проверьте, что сборка проходит успешно и загружается.
  2. Убедитесь, что отладочные символы (*.pdb файлы) доступны.
  3. Запустите ваш Debuggee проект с включенной отладкой и убедитесь, что вы проверяете переменные и объекты после точки останова.

5. Другие рекомендации

  • Убедитесь, что ваш debuggee проект может ссылаться на .NET Standard, это может помочь в совместимости.
  • Используйте журналы или отладочные сообщения (например, Debug.WriteLine) для проверки выполнения кода.
  • Возможно, стоит протестировать ваш визуализатор с более простым объектом перед внедрением Windsor, чтобы изолировать проблему.

Заключение

Создание визуализаторов отладки в Visual Studio 2022 требует тщательной настройки как расширения, так и конечного приложения. Следуйте изложенным рекомендациям, и вы сможете успешно зарегистрировать и использовать ваш WindsorVisualizerObjectSource. Если у вас все ещё возникают проблемы, рассмотрите возможность использования более простых примеров визуализаторов, чтобы понять основную архитектуру.

Оцените материал
Добавить комментарий

Капча загружается...