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

Application builds yet execution fails on Any CPU build

于是there are couple of questions就此事提出了要求。有 x86、x64 二级项目引用另一个在 x86 上创建的项目,并基于在 x86 上构建的第三方 .dll。

整个 DLLImport 和编组调用 com 包装器是使用升级工具创建的。它将VB6.0 升级为.Net 代码。只要是 released 使用 x86 构建,就会在每台 PC 中安装最终的 .exe 和 运行。但是在 AnyCPU 配置上构建时失败。

当 AnyCPU 构建完成并执行程序时,代码不断在第三方 .dll 上抛出错误并抱怨找不到 .dll。 None 这些问题在 x86 上构建时仍然存在。这是一个实际问题,因为该应用程序适用于 Windows 嵌入式标准 OS 和大多数 Windows OS 从 Windows XP 开始的设备。

错误:

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)

如何解决这个问题?这可能是设备 OS 兼容性问题吗?

一些第三方库的创建方式无法为任何其他体系结构编译。

例如,至少理论上您可以在 x86、x86_64 和 ARM(例如 Universal App)中使用完全相同的代码部分,前提是您使用 .NET 从头开始​​编写代码。但是如果这个库只为 x86 编译(无论是开发者的恶意还是优化),它只能被具有相同架构的应用程序使用。 SQLite 就是一个很好的例子,这对任何 Windows Phone 8 开发人员来说都是一种痛苦——你必须同时拥有用于在模拟器中调试的 x86 和用于生产的 ARM(AFAIK,至少我们从来没有找到了一种只有一个的方法)。