【发布时间】:2011-03-24 18:32:41
【问题描述】:
对于将使用目标平台编译的单个应用程序部署为依赖于旧 C++ 代码的 .NET 包装器的 AnyCPU 到 x86 和 x64 操作系统的问题,是否有任何解决方案?您是否需要在所有情况下都提供两个应用程序可执行文件,一个使用目标平台编译为 x86,另一个使用 x64 编译,分别引用 x86 包装器和 x64 包装器?
谢谢!
【问题讨论】:
标签: .net deployment 64-bit portability
对于将使用目标平台编译的单个应用程序部署为依赖于旧 C++ 代码的 .NET 包装器的 AnyCPU 到 x86 和 x64 操作系统的问题,是否有任何解决方案?您是否需要在所有情况下都提供两个应用程序可执行文件,一个使用目标平台编译为 x86,另一个使用 x64 编译,分别引用 x86 包装器和 x64 包装器?
谢谢!
【问题讨论】:
标签: .net deployment 64-bit portability
我使用启动器应用程序来测试操作系统并移动 DLL,以便在运行时使用正确的 DLL(在 32 位操作系统上使用 x86 dll 等)。启动器中的逻辑非常简单。比如:
If IntPtr.Size = 8 Then
'-- Copy x64 DLLs into position
Else
'-- Copy x86 DLLs into position
End If
当然,在复制时,您需要复制回来,以便您始终可以在 x64 和 x86 之间切换(在便携式应用程序的情况下)。但是,如果您正在安装非便携式应用程序,则不需要启动器,因为此操作系统检查都可以在安装程序内完成(因此只有正确的 DLL 被安装)。 Visual Studio 安装项目不允许这样做(因为您不能在一个安装程序中混合 x64 和 x86 组件)但 InstallShield 确实允许这样做(这就是我使用的)。
您将需要编辑您的项目文件以使用相关 DLL 的非特定版本(否则这种移动和条件安装逻辑不会按照您的意愿执行)。
【讨论】: