我有一些代码使用COM公开的第三方库(ArcObjects)。例如,有IGeometry
- 接口。
IGeometry geometry = GetGeometry();
现在,当我想查看对象成员时,我打开了一个QuickWatch:
我已经阅读了几个问题,这些问题都指向Visual Studio 2015中的“启用本机代码调试”选项。我已经启用该选项无济于事。
如何让调试器公开COM对象的成员?
编辑:使用VS2010和.NET 3.5时,这有效:
答案 0 :(得分:7)
如果您还具有组件的PDB和源代码,则启用非托管调试只会产生有用的副作用。您不会,这类组件的供应商不会公开它。您根本看不到任何东西的唯一原因是因为您让VS为COM组件生成了 interop程序集。它将组件的类型库中的声明转换为等效的.NET类型。像IGeometry一样,很可能实际上是一个C ++类。
顶视图和底屏幕截图之间的最大区别是。从VS2010和.NET 4.0开始,不再需要此互操作程序集。通常称为“类型嵌入”的一种非常有用的功能,它避免了为组件部署PIA的需要。对于Office互操作而言,这是非常重要的事情。
类型嵌入会主动删除源代码中未使用的类型和成员。剩下的内容将嵌入到最终组件中,从而无需部署互操作程序集或PIA。换句话说,您无法在调试器中看到IGeometry.Envelope,因为您的源代码未使用该属性。它被嵌入管道的类型剥夺了。
这很容易解决。在项目的“引用”节点中选择COM引用,并将其“嵌入互操作类型”属性设置为False。您可以在测试后以这种方式保留它,不要忘记再部署互操作程序集。
答案 1 :(得分:0)
As suggested in the comments I posted that question on gis.stackexchange.com also, from which I quote our solution:
In Visual Studio under Tools-->Options-->Debugging enable the option "Use Managed Compatibility Mode".