【问题标题】:Application builds yet execution fails on Any CPU build应用程序构建但在任何 CPU 构建上执行失败
【发布时间】:2015-07-01 03:57:25
【问题描述】:

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

整个 DLLImport 和 marshal call com 包装器是使用升级工具创建的。它将 VB6.0 升级为 .Net 代码。只要使用 x86 构建发布d,最终的 .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)

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

【问题讨论】:

  • 第三方dll的构建类型是什么?它是基于 x86 的吗?您收到的错误信息是什么?
  • 您需要提供更多信息:确切的错误信息、所涉及的工具等。
  • “Can't find the thirdparty .dll when build is Any PC”是您在构建控制台中看到的错误消息吗?
  • 如果您在任何 CPU 构建上使用基于 x86 的库,它将无法工作。确保使用与应用程序的构建类型匹配的库。
  • 检查您的应用程序的安装要求是否满足 POS 操作系统。无论如何,POS OS 上出现了什么样的问题?

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


【解决方案1】:

某些第三方库的创建方式无法针对任何其他架构进行编译。

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

【讨论】:

  • 正如我所说,我的赌注是系统架构。您确定这两个库都不是特定于平台的吗?从操作系统列表中可以看出,它似乎只适用于台式机。有关支持的平台列表,请参阅库文档。它可能依赖于系统库,例如用于 GUI 渲染或类似任务。
  • 应用程序有几个方面。 1. 它为用户设置了一个应用程序来更改文件夹路径和密码等。 2. 第三方.dll 用于连接其他设备。在运行它运行的应用程序方面,GUI 非常完整,当我们单击从 POS 连接到设备时,它会引发上述错误。所以它或多或少不是真正的 GUI 渲染,而是直接在那个 .dll 上。我还怀疑 POS 没有通过控制面板卸载完全清理旧注册表,它可能指向旧版本。
猜你喜欢
  • 2021-09-05
  • 2021-05-08
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多