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''
一种方法:
在引用 上右键属性把嵌入互操作类型改为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''
英文描述: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
- ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题
- ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题
- ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题
- ArcEngine开发在globecontrol中使用OpenGL
- ArcEngine开发问题总结
- ArcEngine vc2005下开发的命名冲突问题
- ArcEngine在VS环境下开发遇到的一些配置问题
- ArcEngine开发程序中关闭时内存泄漏的问题
- VC2010MFC下的ArcEngine开发(一)
- VC2010MFC下的ArcEngine开发(二)
- VC2010MFC下的ArcEngine开发(一)
- 如何在WPF项目中使用ArcEngine的控件做开发
- 有关ArcEngine开发问题三
- C#基于vs2010的ArcEngine开发demo源码
- ArcEngine开发 ——点击选择
- ArcEngine开发遇到的坑
- 在eclipse中可视化开发arcengine程序--相关环境配置
- ArcEngine开发 TOCC中“图层”标记不显示问题
- 全程详解 VS2010+PCL配置
- Linux 下整合Apache+tomcat+mysql
- RAID 0+1 与 RAID 1+0 详细解释
- HBase实战
- 利用ACE 自己实现的线程池
- ArcEngine开发——在64位操作系统下使用VS2010中开发ArcEngine应用程序的编译问题
- Who's in the Middle
- VS2010 c++编写的程序在别人的机子运行不了,缺少mfc100.dll, xxx100d.dll等的解决方法
- Android学习之 博客专栏 与 资料
- matlab文件操作
- javascript 加载 xml
- 实用网站推广策略分析三则
- Linux Epoll并发服务器开发
- 使用DD_belatedPNG让IE6支持PNG透明图片