Esri ArcObjects .NET SDK 10.4构建工具的自动生成代码在调试

时间:2018-03-27 16:15:52

标签: c# .net arcgis arcmap arcobjects

我目前正在使用.NET框架为ArcMap 10.4编写插件。我使用的是最新的ArcGIS Runtime SDK for .NET(100.2.1)和10.4 ArcObjects SDK。我正在使用64位操作系统和处理器在Windows Server 2016 Standard Edition(版本1607)虚拟机上进行开发。

我已使用ArcMap加载项向导自动生成具有Polygon类型的构造工具,并在我的Config.esriaddinx中添加了必要的代码以将该工具添加到工具栏。我没有对自动生成的C#代码进行任何更改。

项目设置为通过ArcMap进行调试并附加到流程,由向导自动设置。所有这一切都运行正常:调试器启动,工具栏上有一个按钮,显示Windows窗体,一切正常。当我尝试单击与构造工具对应的工具栏上的按钮时出现问题:

enter image description here

单击此按钮会调用构造工具的自动生成的OnActivate()方法:

protected override void OnActivate()
        {
            m_edSketch = m_editor as IEditSketch3;

            // Activate a shape constructor based on the current sketch geometry
            if (m_edSketch.GeometryType == esriGeometryType.esriGeometryPoint | m_edSketch.GeometryType == esriGeometryType.esriGeometryMultipoint)
                m_csc = new PointConstructorClass();
            else
                m_csc = new StraightConstructorClass();

            m_csc.Initialize(m_editor);
            /* TODO: This is auto-generated code... Why does this throw an exception??? */
            m_edSketch.ShapeConstructor = m_csc;
            m_csc.Activate();

            // Setup events
            m_editEvents.OnSketchModified += OnSketchModified;
            m_editEvents5.OnShapeConstructorChanged += OnShapeConstructorChanged;
            m_editEvents.OnSketchFinished += OnSketchFinished;
        }

这是抛出异常的方法。在

m_edSketch.ShapeConstructor = m_csc;

抛出以下异常:

Error HRESULT E_FAIL has been returned from a call to a COM component.
Error Code: -2147467259
Trace:
at 
ESRI.ArcGIS.Editor.IEditSketch3.set_ShapeConstructor(IShapeConstructor ShapeConstructor)
at AddIn.ConstructionTool.OnActivate() in 
C:\...\ConstructionTool.cs:line 50

这个例外真的没什么可说的,特别是因为HRESULT错误代码解析为未指定的失败(0x80004005)。它也被扔到这里感觉特别奇怪,因为这是自动生成的代码,我们所做的就是设置一个值。

知道为什么会抛出这个异常吗?这可能是ArcGIS Runtime和ArcObjects SDK之间的版本不匹配吗?我的Windows机器中是否有一些.dll缺少ArcObjects SDK预计会在这里?有没有人遇到过类似的问题并找到了解决方法?

注释抛出异常的行允许事情无错误地运行,但该工具不起作用且不绘制任何行。

这里的任何帮助都很有用。

1 个答案:

答案 0 :(得分:0)

尝试在项目参考中将embed interop types属性更改为false。 所有esri引用

将该属性设置为true时会引起问题