无法加载 DLL“ArcGISVersion.dll”: 找不到指定的模块。

   AE绑定产品时报错:

RuntimeManager.BindLicense(ProductCode.EngineOrDesktop, LicenseLevel.GeodatabaseUpdate);

                               无法加载 DLL“ArcGISVersion.dll”: 找不到指定的模块。_第1张图片

解决方案:在 .NET 4.0框架下将目标平台改为X86就好了

                  在  .NET 4.5 之后再目标平台位Any CPU时 勾选首选32位就好

那么接下来就分析下这种错误出现的原因:

       主要是启动项目是在Any CPU平台下编译的,而Any CPU取决于当前的操作系统,我的操作系统是64位的。但是ESRI.ArcGIS.Version.dll这个引用是32位的,64位程序不能加载32位的dll,所以就出现了这个报错。

附加x86、x64、Any CPU区别:

        简单的说,他们之间最直接的区别就是:x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的。以此类推,x64对应的则是64位的。而Any CPU则是取决于当前的操作系统,若操作系统是32位的,则编译出来的程序就是32位的,反之编译出来的就是64位程序。

      若你的启动项目,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或动态链接库)是由x64位平台编译出来的,则会提示“未能加载文件或程序集...或它的某一个依赖性。试图加载格式不正确的程序。”之类的错误。这是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等。反之,若主程序是由x64平台编译出来的,而dll是x86的呢?答案。。也是不行的!说到这里,基本上可以确定一点:dll和主程序的生成平台只要一致就可以。那么问题来了!若主程序是Any CPU编译的,而dll是由x86或者x64平台编译的,又或者,主程序是x86或者x64平台编译的,而dll是由Any CPU编译的呢?正确答案就是两者在“特殊情况”下都是可行的。为什么说是“特殊情况”下呢?因为Any CPU取决于操作系统,只要dll和主程序的生成平台一致,那么也是可行的。所以,由上可知:若主程序是在Any CPU平台下编译的,那么编译dll的平台必须要和编译主程序的操作系统一致才行。若主程序是在x86或者x64平台下编译的,那么dll就必须要和主程序一致。不过有个特例:若dll由Any CPU编译的,那么这个dll就可以被32位和64位的主程序调用。这是为什么呢?请看第三点。
       虽说Any CPU编译出来的程序取决于操作系统,但是由Any CPU编译出来dll则取决于调用它的主程序,即若主程序是32位的,那么dll也是32位的,若主程序是64位的,那么dll就是64位的。所以dll一般采用Any CPU平台编译,而主程序一般采用x86平台编译。

   原文地址:http://www.timegowhere.com/post/about_vs_targetplatform.html

 

 

你可能感兴趣的:(ArcGIS)