AE32位程序 移植到 64位系统

未能加载文件或程序集“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) 




1. 关闭Visual Studio。

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 属性的值为相应的版本就可以了。

最后重新打开与应用程序即可正常运行程序。

 


 

posted on 2012-11-17 13:54  很遗憾我不是  阅读(5594)  评论(0编辑  收藏  举报