原因可以有很多:未能加載文件或程序集“ESRI.ArcGIS.AxControls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86”或它的某一個依賴項。系統找不到指定的文件。
1.AO是32位原生組件,一般認為不支持64位系統(道聽途說),所以只能在32位環境下進行編譯。
2.還有就是9.3和10.0之間的差異,引用項、綁定productcode、修改引用屬性。
3.項目屬性中需將Target Processor屬性設置為X86。
在使用ArcObjects代碼之前,如果沒有在正確的位置放置RuntimeManager.Bind方法代碼,則會導致如下錯誤。
ArcGIS 10中有一個新的要求——runtime綁定。所謂runtime綁定,就是在任何ArcObjects代碼(包括許可初始化代碼)被執行之前,指定相稱的ArcGIS產品——ArcGIS Desktop或者ArcGIS Engine應用程序。建立runtime綁定的APIs位於程序集ESRI.ArcGIS.Version的類ESRI.ArcGIS.RuntimeManager中,該程序集隨着任何ArcGIS 10 runtime一起安裝於全局程序集緩存(Global Assembly Cache (GAC))中。安裝了ArcObjects .NET SDK,默認的,程序集ESRI.ArcGIS.Version位於C:\Program Files\ArcGIS\DeveloperKit10.0\DotNet文件夾下。可以在Visual Studio IDE中將該程序集添加為項目引用。
[C#]
//Insert this line before the Application.Run in the static void Main() method.
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);
[VB.NET]
'Insert this line before the InitializeComponent() method in Public Sub New().
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine)
2. 在Visual Studio Tools子目錄,以管理員身份運行Visual Studio Command Prompt (2010),切換目錄到"<system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\”. ( 我的是v7.0A )
3. 執行命令:
corflags /32bit+ ResGen.exe /force
4. 在記事本中打開 <project_name>.csproj 文件
5. 添加這個屬性在PropertyGroup下面: <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture>,然后保存文件。
再次嘗試編譯,一切OK!
將project的target processor設置成X86
查看引用項
AE的版本隨着時間的流逝也在漸漸的升級,一直升級到目前的AE10,由於版本的問題,原來低版本的采用AE組建寫的App因為版本的問題也就不能直接運行了,這樣就需要直接對這些AE組建升級,然后根據實際情況進行調試程序。
1)第一種升級方法
打開原程序中的 引用文件夾,我們可能會看到有些引用的名稱前面有黃色的感嘆號,這就表示該引用是不能用的,這個就是升級帶來的問題,
解決方法:將帶有黃色感嘆號的引用刪除,然后重新添加相應名稱的引用即可,以此類推,將黃色的引用重新添加,然后程序就可以運行了。
2)第二種升級方式
這種升級方式也是最近知道的,
找到文件擴展名稱為.csproj 的文件,比如 EditorApp.csproj,用記事本打開
然后我們 就可以看到添加到該App引用中DLL庫。。
類似於下面的 9.3.0版本的AE和10版本的AE引用版本的對照
<!--
<Reference Include="ESRI.ArcGIS.AxControls, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.Carto, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.Controls, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.DataSourcesFile, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.DataSourcesGDB, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.DataSourcesRaster, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.Display, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.Geodatabase, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.Geometry, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.System, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
<Reference Include="ESRI.ArcGIS.SystemUI, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
-->
<Reference Include="ESRI.ArcGIS.3DAnalyst, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.AxControls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.Carto, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.Controls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.DataSourcesFile, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=x86" />
<Reference Include="ESRI.ArcGIS.DataSourcesGDB, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=x86" />
<Reference Include="ESRI.ArcGIS.DataSourcesRaster, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=x86" />
<Reference Include="ESRI.ArcGIS.Display, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.Geodatabase, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=x86" />
<Reference Include="ESRI.ArcGIS.Geometry, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.GlobeCore, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.Output, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.System, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.SystemUI, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ESRI.ArcGIS.Version, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
<Reference Include="ExcelLibrary, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
在這里,我們緊緊需要修改下Version 屬性的值為相應的版本就可以了。
最后重新打開與應用程序即可正常運行程序。