应用程序构建但在任何CPU构建上执行失败

时间:2015-04-23 06:30:25

标签: c# dll build-process x86-64

所以there are couple of questions问了这个问题。有x86,x64辅助项目,它引用了在x86上创建的另一个项目,并基于在x86上构建的第三方.dll。

整个DLLImport和marshal call com包装器是使用升级工具创建的。它将VB6.0升级为.Net代码。只要发布 d使用 x86 版本,最终的.exe就会在每台PC上安装并运行。但是当构建在 AnyCPU 配置时,它会失败。

当完成AnyCPU构建并执行程序时,代码不断向第三方.dll抛出错误并且投诉它无法找到.dll。当构建在x86上时,这些问题都不会持续存在。这是一个实际问题,因为该应用程序适用于Windows Embedded Standard OS上的设备以及Windows XP以上的大多数Windows操作系统。

错误:

System.DllNotFoundException was unhandled  HResult=-2146233052
  Message=Unable to load DLL 'posLTD.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
  Source=ProjectOne      TypeName=""      StackTrace:
       at PorjectOne.PInvoke.UnsafeNative.POSLTD.ConnectToDevice(Int32 nMachineNo, String& strIpAddress, Int32 nNetPort, Int32 nTimeOut, Int32 nProtocolType, Int32 nNetPassword, Int32 nLicense)

可以做些什么来解决这个问题?这可能是设备操作系统兼容性问题吗?

1 个答案:

答案 0 :(得分:0)

某些第三方库是以这种方式创建的,它们无法针对任何其他架构进行编译。

例如,如果您使用.NET从头开始编写,至少在理论上您可以在x86,x86_64和ARM(例如Universal App)中使用完全相同的代码部分。但是,如果库仅针对x86编译(无论是开发人员的错误还是优化),它只能由具有相同体系结构的应用程序使用。一个很好的例子就是SQLite,对于任何Windows Phone 8开发人员来说都是一个痛苦的后果 - 你必须同时拥有x86用于模拟器中的调试和用于生产的ARM(AFAIK,至少我们从未找到过只有一个的方法)