ArcObjects|ArcGIS Engine升级的常见问题

3
分享 2016-06-06
ArcGIS Engine 9.x应该是当年国内GIS开发用得最多的产品,培养了一批“二次开发者”,建设了无数“应用系统”。随着B/S和移动的流行,AE逐渐式微,但产品仍在,版本依旧继续更新。而且,目前各种方案想要完全替代AE的功能还不现实,总有一些项目面临版本升级,故整理一些常见的问题帮助新老同行。
总体来看:
 
  1. 在9.3到10.0的升级时,AE的接口发生了较多的变化,可以仔细阅读参考帮助中的升级指南:http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/How_to_migrate_ArcGIS_9_3_Desktop_and_Engine_stand_alone_applications_to_ArcGIS_10/0001000002ns000000/
  2. 从10.1开始取消了通过DCOM方式远程调用AO的功能(一个MS的大坑),因此针对ArcGIS Server的连接和管理的代码基本都需要修改。
  3. 其他版本的升级时也都会有一些接口变化,通常是一些不常用的接口。


一些比较常见的问题:
  1. 从10.0开始,ArcGIS Engine使用了与Desktop一样的许可模式(在线绑定计算机信息),破解的复杂度大增,破解的稳定性极差。由于几乎没有人用正版进行开发,开发者数量减少除了大势所趋,破解难度增加也是一个推手。我的建议是,用Desktop的试用许可进行开发,除了控件不能拖拽,其他问题不大。有文章手把手教你申请试用许可:http://zhihu.esrichina.com.cn//article/131
  2. 绑定产品,通常在代码的初始阶段加入ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine)语句,该语句需要引用ESRI.ArcGIS.Version类库(C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dll)。该语句的功能是寻找产品的安装目录,10.0之前ArcGIS的主要产品是安装在同一个目录中,所以不用区分。10.0开始每个产品都有各自的目录了,因此在代码中也需要指定一下。(通常在InitializeComponent之前,C#在Main函数开始时,VB.NET在Public Sub New()函数中)
  3. 9.2中ADF类的引用为ESRI.ArcGIS.ADF和ESRI.ArcGIS.ADF.Connection在10.0中改为ESRI.ArcGIS.ADF.Local和ESRI.ArcGIS.ADF.Connection.Local
  4. AxControls类库需要在.NET引用界面下才能找到,ArcGIS引用中没有。拖拽控件时会自动添加,自己添加时可能会找不到。  
  5. 从.NET Framework 4.0开始,需要注意ESRI的类库“嵌入式互操作类型”必须设置为False,ESRI不支持这个新特性,好像很多厂商都不支持,具体原因仔细搜一搜吧。  
  6. 引用的类库“特定版本”建议设置成False,升级时省得改来改去的。
  7. 在64位操作系统,VS2010中,使用.NET Framework 3.5环境时,程序运行时可能报错。解决方法参考:http://support.esrichina-bj.cn/2011/0826/1255.html 另外,VS2010的帮助程序超级难用(换个第三方的吧),而AE10.1只支持这个版本的IDE,所以我从不用这个版本(MS又一个坑啊坑)。
  8. 在64位操作系统中需要在项目的编译选项中,将目标平台(Target CPU)选择为x86。老程序可能用的是32位系统,所以没这个问题。在64位系统中编译的程序,可以运行在32位系统中,至少.NET和Java没问题。
  9. 9.x中ESRI.ArcGIS.Display.tagRECT 在10.x中改为 ESRI.ArcGIS.esriSystem.tagRECT ,这个类用的还是挺多的。
  10. IMap.ClipGeometry在10.x中需要结合IMapClipOptions接口一起使用,这是一种典型现象,原来用一个接口搞定的事情,现在功能扩展了,用两个接口组合一下。
  11. 10.x中对VC++的支持渐弱,可能在某些机器上出现控件无法注册和GP工具无法执行的问题,问题可能随机出现。这问题就像是个门槛,能解决的人再考虑用C++吧。

文章来源:http://www.jianshu.com/p/df923dc4464e

2 个评论

很实用的文章,让俺回想起了当年程序升级时....
不知道10.0升级到10.2问题多不多 到时候请教你

要回复文章请先登录注册