我有一些使用由COM公开的第三方库(ArcObjects)的代码。例如,有IGeometry接口。IGeometry geometry = GetGeometry(); 现在当我想查看对象成员时,我会打开QuickWatch: 我读了几篇文章,都指向了Visual Studio 2015中的“启用本机代码调试”选项。我已经启用了该选项,但没有效果。 如何让调试器公开COM对象的成员? 编辑:在使用VS2010和.NET 3.5时,可以这样做:
启用未托管调试只有在您同时拥有组件的PDB和源代码时才能产生有用的副作用。然而,这些类型的组件供应商不会披露这些内容。您之所以能看到任何东西,仅因为您让VS为COM组件生成了Interop程序集。该程序集将组件类型库中的声明转换为等效的.NET类型,例如IGeometry,其实在底层可能是一个C++类。这就是顶部视图和底部截图之间的重大区别。从VS2010和.NET 4.0开始,不再需要此Interop程序集。一般来说,"类型嵌入"是一个非常有用的功能,它可以避免部署组件的PIA。对于Office互操作尤其重要。类型嵌入会积极地删除源代码中未使用的类型和成员。剩下的被嵌入到最终程序集中,从而消除了部署Interop程序集或PIA的需要。换句话说,您无法在调试器中看到IGeometry.Envelope,因为您的源代码没有使用该属性。这是由类型嵌入机制删除的。解决方法很简单。选择项目的引用节点中的COM引用,并将其"嵌入Interop类型"属性设置为False。测试后可以保留此设置,但不要忘记部署Interop程序集。
根据评论建议,我在 gis.stackexchange.com 上发布了这个问题,并从中引用我们的解决方案: 在 Visual Studio 中,转到 工具-->选项-->调试,启用"使用托管兼容模式"选项。
geometry.IsEmpty
确保管道正常。在gis.stackexchange.com网站上找到此产品的其他用户。 - Hans Passant