zoukankan      html  css  js  c++  java
  • ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题

      首先说明一下所搭建的环境,信息比较多,文字难以描述,就直接上图咯。

      操作系统信息:

      

      Visual Studio 2010信息:

      

      ArcGIS系列软件信息:

      

      以上是我进行ArcGIS Engine 10.0开发的详细环境信息。下面描述使用ArcGIS Engine的MapControl Application模板时的问题。

        1、启动VS2010,新建一个项目;

        2、使用.NET Framework 3.5,依次展开Visual C#->ArcGIS->Extending ArcObjects,选择MapControl Application模板,命名该项目并指定存储路径,点击确定。

        3、如此便依据模板建立了一个ArcGIS Engine应用程序,不要做其它任何操作,编译并建立项目,程序可以准确运行。(请注意在完成step 2后,解决方案管理器里列出了该项目的所有项,但是没有任何项是处于编辑状态的,也就是说VS2010的编辑区是空的)

        下面问题开始了。大家知道,可以在设计开发阶段通过MapControl控件的属性指定地图文档或者图层。

        4、双击解决方案管理器中的MainForm.cs,在编辑区显示了MainForm的设计视图,可以看到由几个ArcEngine的控件和一个菜单栏填充了整个窗体。

        5、通过MapControl的属性对话框为其添加图层数据,或者指定地图文档。

        6、再次编译,发生了如下错误:

        

        中文描述:未能加载文件或程序集''file:///D:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.ADF.Local.dll'' 或它的某一个依赖项。试图加载格式不正确的程序。行 189 位置5。.
        英文描述:Could not load file or assembly ''file:///D:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.ADF.Local.dll'' or one of its dependencies. An attempt was made to load a program with an incorrect format. Line 189, position 5. 
      是很怪异的一个问题。既然如此,那么移除MapControl控件的属性框中的数据,在编译,仍然是该错误。ArcGIS论坛http://forums.arcgis.com/index.php中也有人详细描述过该问题,详见http://forums.arcgis.com/threads/16034-vs-2010-arcobject-10-mapcontrol-app-compile-problem完成上述Step1~4,没有Step5,编译出现同样的错误。
      在上面帖子中,提到了一个解决办法http://support.microsoft.com/kb/2028833,详见MSBuild 4.0 or Visual Studio 2010 may fail to compile a 32-bit application targeted for .Net Framework 3.5, 3.0 or 2.0 on x64 machine。说是MSBuild或者VS2010在64位的操作系统下,基于.NET Framework 3.5,3.0或2.0来建立32位的应用程序可能会失败。

      详细解决步骤如下:

        1、关闭所有Visual Studio;

        2、以管理员的身份打开VS2010的命令提示窗口;

        3、更改目录至"<system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\”下面;

        4、输入该命令corflags /32bit+ ResGen.exe /force,执行;

        5、使用记事本打开<project_name>.csproj文件;

        6、在PropertyGroup下添加<ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture>,保存,关闭退出。

      现在在VS2010中重新打开原先的项目,编译通过,可以正确运行了!

      对于该问题,还有另一个解决办法,打开项目属性页面,选择应用程序选项卡,设置目标框架为.NET Framework 4,如下如所示:

      

      问题得到初步解决,仔细想想这里还有个问题:按上述问题发生的步骤,完成Step1~3后,程序为什么可以正确执行呢?后续会对该问题做进一步的分析......

      有关CorFlags.exe转换工具的详细信息请参见http://msdn.microsoft.com/zh-cn/library/ms164699.aspx

      有关Resgen.exe资源文件生成器的详细信息请参见http://msdn.microsoft.com/zh-cn/library/ccec7sz1.aspx

      ArcGIS Resource Center上关于该问题的一片文章ArcGIS Engine Controls fail to build using Visual Studio 2010 on a 64-bit OS

  • 相关阅读:
    MD5中使用16进制
    关于mysql函数GROUP_CONCAT
    一个不错的源码网站
    查看jdk 线程 日志
    list 的sublist 隐藏 bug
    web 环境项目(intellj部署的tomcat) 重启时报 Exception in thread "HouseKeeper" java.lang.NullPointerException
    怎么给已有项目引入别的项目
    javascript 和 CoffeeScript 里的类
    express 与 mvc
    express的路由
  • 原文地址:https://www.cnblogs.com/hans_gis/p/2114013.html
Copyright © 2011-2022 走看看