Разрешить отладку собственного кода вглубь COM-объекта - PullRequest
0 голосов
/ 22 мая 2018

У меня есть код, который использует стороннюю библиотеку (ArcObjects), предоставляемую COM.Так, например, есть IGeometry -интерфейс.

IGeometry geometry = GetGeometry();

Теперь, когда я хочу посмотреть на элементы объектов, я открываю QuickWatch:

enter image description here

Я прочитал несколькопроблемы, которые все указывают на опцию «включить отладку собственного кода» в Visual Studio 2015. Я уже включил эту опцию, но безрезультатно.

Как заставить отладчик выставлять члены COM-объекта?

РЕДАКТИРОВАТЬ: При работе с VS2010 и .NET 3.5 это работает:

enter image description here

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Как и предлагалось в комментариях, я также разместил этот вопрос на gis.stackexchange.com , из которого я цитирую наше решение:

В Visual Studio в разделе Инструменты ->Параметры -> Отладка включают параметр «Использовать режим управляемой совместимости».

0 голосов
/ 31 августа 2018

Включение неуправляемой отладки может иметь полезный побочный эффект, если у вас также есть PDB и исходный код для компонента.Вы не делаете, поставщики таких компонентов не раскрывают это.Единственная причина, по которой вы можете что-либо увидеть, заключается в том, что вы позволили VS сгенерировать сборку взаимодействия для компонента COM.Который преобразует объявления в библиотеке типов для компонента в эквивалентные типы .NET.Как и IGeometry, скорее всего, на самом деле класс C ++ под капотом.

Что является большой разницей между видом сверху и снимками экрана снизу.Начиная с VS2010 и .NET 4.0, эта сборка взаимодействия больше не нужна.Вызывается «внедрение типа», как правило, очень полезная функция, она позволяет избежать необходимости развертывания PIA для компонента.Это особенно важно для взаимодействия с Office.

Тип, встраивающий агрессивно удаленные типы и элементы, которые не используются в исходном коде.То, что осталось, встроено в вашу окончательную сборку, что устраняет необходимость развертывания сборки взаимодействия или PIA.Или, другими словами, вы не можете увидеть IGeometry.Envelope обратно в отладчике, потому что ваш исходный код не использует это свойство.Он был раздет по типу встраиваемой сантехники.

Это легко исправить.Выберите ссылку COM в узле Reference вашего проекта и установите для его свойства "Embed Interop Types" значение False.После тестирования вы можете оставить все как есть, не забудьте также развернуть сборку взаимодействия.

...