1

Я создал новый Visual Studio пакет, который при загрузке создает окно инструмента, который выглядит следующим образом:Зов Visual Studio Пакет

enter image description here

Она состоит из нескольких элементов управления с холстами и таким образом, что ничья формы в 2 или 3 размерах. Сейчас они работают на этапе инициализации, чтобы создать объекты, которые вы видите выше. Чтобы этот инструмент был полезным, я хотел бы вызвать метод для этих элементов управления, чтобы передать ему другие объекты для рисования. Например, я отлаживаю код с точками и строками и хочу видеть их графически. (Возможно, используя Immeadiate Window? Или что-то подобное?) Я хотел бы иметь возможность вызвать GeometryVisualToolWindow.DrawObject (myCircle);

Как получить доступ к общедоступным методам в пакете и передать аргументы?

Я не хочу использовать визуализатор отладчика, потому что хочу иметь возможность выборочно добавлять и удалять объекты из сцены, где визуализатор отладчика будет показывать только один объект. (Например, я хочу увидеть, если две линии пересекаются, и т.д.)


Update

Я попытался использовать DTE.Debugger.GetExpression, чтобы решить эту проблему, но после добавления соответствующих ссылок, я получаю это:

enter image description here

+0

Как вы их называете? Произвольный код работает с отладчиком? – SLaks

+0

Очень да, я представляю окно Immediate. Вы можете посмотреть [этот вопрос] (http://stackoverflow.com/questions/26105685/access-variables-from-the-locals-watch-autos-or-immediate-windows). Где это то, что я действительно хочу сделать. но я хочу увидеть сразу несколько объектов. где в визуализаторе отладчика я видел бы только один объект – jth41

ответ

0

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

См модель автоматизации: http://i.msdn.microsoft.com/dynimg/IC75297.gif

Вы имеете доступ к экземпляру DTE.Debugger, это описано здесь: http://msdn.microsoft.com/en-us/library/aa291845(v=vs.71).aspx (Visual Studio Debugger Object Model).

Затем вы можете выбрать:

1) Выполнить фактическое утверждение в VS отладчик (ExecuteStatement). Это означает, что вам необходимо позаботиться о загрузке всех ваших сборок в конкретный сеанс отладчика. Загруженная сборка должна заботиться о добавлении статической функции, которую пользователь может вызвать. Например, GeometryVisualToolWindow.DrawObject(myCircle);. Метод должен взаимодействовать с VSPackage.

ИЛИ

2) Использование GetExpression ("myVariable.SerializeToBase64()") от VSPackage, и вуаля, у вас есть сериализованный экземпляр вашего myVariable. Конечно, сначала вам нужно ввести такую ​​функциональность.

http://msdn.microsoft.com/en-us/library/aa291625(v=vs.71).aspx

+0

Не склонялся к использованию окна immeadiate. просто казалось, что место для начала – jth41

+0

Ну, все эти окна (немедленное окно, авто, местные жители, ..) afaik зависят от DTE.Debugger.У вас есть доступ к текущему стековому кадру, то есть вы можете получить список всех местных жителей, и каждый локальный имеет выражение, которое вы можете проверить. Проблема заключается в переносе представления из сеанса отладки VS в пакет VS, поскольку эти два живут в совершенно другом контексте. –

+0

Итак, если я правильно понял, у меня будет метод (скажем, прикрепленный к кнопке в окне моего пакета), который вызывает DTE.Debugger.GetExpression («myVariable.LineSegments») или что-то подобное, что вернет что-то доступное, и я буду рисовать эти строки – jth41

Смежные вопросы