ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题

来源:互联网 发布:电子物料编码软件 编辑:程序博客网 时间:2024/05/18 01:30

1.ArcGIS version not specified. You must call RuntimeManager.Bind before creat

打开program.cs把ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);这句放到Application.SetCompatibleTextRenderingDefault(false);和Application.Run(new Form1());之间应该就好

2.未能加载文件或程序集''file:///D:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.ADF.Local.dll'' 或它的某一个依赖项。试图加载格式不正确的程序。行 189 位置5

一种方法:

在引用 上右键属性把嵌入互操作类型改为false,然后在工程上右键属性,在"生成"标签上将目标平台改为 Any CPU
我是在VS2010上操作的,是在引用那里,找到 ESRI.ArcGIS.3DAnalyst 这个引用, 然后在上面右键,把嵌入互操作类型改为false,然后在工程上右键属性,在"生成"标签上将目标平台改为 x86 或者 Any CPU ,因为ESRI控件是 32 位的,因为它会尝试加载 32 位程集,并失败。如果不想改为X86,可以参考如下
http://blog.csdn.net/linghe301/article/details/6180845

 

另一种方法

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

  操作系统信息:

  

  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