轉自:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=107612&extra=&page=1
許多版友在剛剛使用ArcGIS 10做開發的時候,都會遇到這樣那樣的問題。在擔任實習版主的這一個多月里,看到了這么幾個與開發環境相關的問題,重復被提到相當多,于是我就做了這個FAQ。
Q:哪兒有10的ArcGIS Engine SDK? A:ArcGIS 10不需要安裝單獨的Engine開發包,在Desktop的鏡像中,安裝ArcObjects SDK就可以使用Engine的那些控件做開發了。只在部署的時候還需要Engine Runtime。
Q:為什么在9.3中執行正常的代碼,在10中會執行出錯,拋出異常COMException A:是如下圖這個異常么?
10新增了一個dll,ESRI.ArcGIS.Version,添加這個引用。然后在Main方法中,在窗體啟動之前,添加這么一行代碼:
- RuntimeManager.Bind(ProductCode.EngineOrDesktop);
重新編譯執行即可。
Q:為什么以前正常的代碼,現在都編譯都通不過了,提示什么“無法嵌入互操作類型...”
A:你用的是Visual Studio 2010和C# 4吧?如果是,那就對了。這個問題和Engine本身無關。 這是C# 4對COMInterop的一個改進,把創建CoClass時的類名的Class后綴去掉即可。不允許用CoClass本身,而必須用相應的接口來創建對象。 比如,
- IPoint p = new PointClass()
改為:
- IPoint p = new Point()
詳細的解釋可以看這里的:嵌入的互操作類型(如果嘗試使用 CoClass 創建嵌入的 COM 類型的實例,則會導致編譯器錯誤)
Q:為什么以前正常的代碼,現在一運行就報錯,拋出異常BadImageFormatException
A:你的操作系統是64位的Windows吧?可是ArcGIS現在只有32位的,所以必須用X86平臺生成項目。 打開項目屬性,在“生成”選項卡中找到目標平臺,把Any CPU改為x86,重新生成即可。
Q:我要用ArcGIS Engine 10,一定要用Visual Studio 2010嗎?
A: 不一定,不論什么版本的Visual Studio和什么版本ArcGIS Engine SDK,都是可以組合的。 因為ArcGIS Engine的SDK是一些COM組件,而C#、VB、VC++對COM的支持一直是有的。
注:Engine SDK可能會檢查系統已安裝的VisualStudio版本,比如ArcObjects 10 SDK(內含Engine)只在已有10或者08SP1的系統完成安裝。當然,如果有辦法繞過去,就沒問題了。
可能你裝上之后工具箱里面的神馬MapControl,SceneControl、LicenseControl都沒有出來。 這個沒關系,添加工具箱項,找到Engine的dll,添加進來,一切Ok
這個問題還是補充地具體一些吧: 1、在VS工具箱內右鍵,添加選項卡,取名ArcGIS Windows Form 2、在新選項卡上右鍵,選擇項... 3、點瀏覽,找到ESRI.ArcGIS.AxControls.dll(缺省安裝在"C:\Program Files\ArcGIS\DotNet\ESRI.ArcGIS.AxControls.dll"),打開。
4、勾選中新出現的那幾個ArcGIS的控件,點確定。