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

C# 应用程序构建但在任何CPU构建上执行失败,c#,dll,build-process,x86-64,C#,Dll,Build Process,X86 64,所以我被问到这件事。有一个x86、x64辅助项目,它引用了在x86上创建的另一个项目,该项目基于在x86上构建的第三方.dll 整个DLLImport和封送处理调用com包装器是使用升级工具创建的。它将VB6.0升级为.Net代码。只要使用x86版本发布final.exe,它就会在每台PC上安装和运行。但当构建基于任何CPU配置时,它会失败 当任何CPU构建完成并执行程序时,代码不断向第三方.dll抛出错误,并抱怨找不到.dll。在x86上构建时,这些问题都不会持续。这是一个实际问题,因为该应用

所以我被问到这件事。有一个x86、x64辅助项目,它引用了在x86上创建的另一个项目,该项目基于在x86上构建的第三方.dll

整个DLLImport和封送处理调用com包装器是使用升级工具创建的。它将VB6.0升级为.Net代码。只要使用x86版本发布final.exe,它就会在每台PC上安装和运行。但当构建基于任何CPU配置时,它会失败

当任何CPU构建完成并执行程序时,代码不断向第三方.dll抛出错误,并抱怨找不到.dll。在x86上构建时,这些问题都不会持续。这是一个实际问题,因为该应用程序适用于Windows嵌入式标准操作系统和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)

如何解决这个问题?这可能是设备操作系统兼容性问题吗?

某些第三方库是以这样的方式创建的,即它们不能针对任何其他体系结构进行编译


例如,至少在理论上,您可以在x86、x86_64和ARMeg中使用完全相同的代码部分。通用应用程序,如果您使用.NET从头开始编写。但是,如果该库仅为x86be编译,则会对开发人员或优化造成不良影响,它只能由具有相同体系结构的应用程序使用。SQLite就是一个很好的例子,这对任何Windows Phone 8开发人员来说都是一个痛苦的负担-您必须同时拥有用于emulator中调试的x86和用于ProductionAfik的ARM,至少我们从来没有找到一种只拥有一个的方法。

第三方dll的构建类型是什么?它是基于x86的吗?您收到的错误消息是什么?您需要提供更多信息:确切的错误消息、涉及的工具等。无论何时构建任何PC,都找不到第三方.dll。您在构建控制台中看到的错误消息?如果在任何CPU构建上使用基于x86的库,它将无法工作。确保使用与应用程序的生成类型匹配的库。检查应用程序的安装要求是否满足POS OS。不管怎样,POS操作系统上出现了什么样的问题?正如我所说,我的赌注是系统架构。您确定这两个库都不是特定于平台的吗?从操作系统的look-on列表来看,它似乎只在台式机上工作。有关支持的平台列表,请参阅库文档。它可能依赖于系统库,例如GUI渲染或类似任务。应用程序只有几个方面。1.它为用户设置了一个应用程序来更改文件夹路径和密码等。2.第三方.dll用于连接到其他设备。就运行它运行的应用程序而言,GUI相当完整,当我们单击从POS连接到设备时,它抛出上述错误。所以它或多或少不是一个真正的GUI呈现,而是直接在.dll上。我还怀疑POS没有通过控制面板卸载完全清理旧注册表,它可能指向旧版本。