首先说明一下所搭建的环境,信息比较多,文字难以描述,就直接上图咯。
操作系统信息:
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