【问题标题】:Can two wrappers (x86 and x64) be used with the same AnyCPU application?两个包装器(x86 和 x64)可以与同一个 AnyCPU 应用程序一起使用吗?
【发布时间】:2011-03-24 18:32:41
【问题描述】:

对于将使用目标平台编译的单个应用程序部署为依赖于旧 C++ 代码的 .NET 包装器的 AnyCPU 到 x86 和 x64 操作系统的问题,是否有任何解决方案?您是否需要在所有情况下都提供两个应用程序可执行文件,一个使用目标平台编译为 x86,另一个使用 x64 编译,分别引用 x86 包装器和 x64 包装器?

谢谢!

【问题讨论】:

    标签: .net deployment 64-bit portability


    【解决方案1】:

    我使用启动器应用程序来测试操作系统并移动 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 的非特定版本(否则这种移动和条件安装逻辑不会按照您的意愿执行)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 2014-11-05
      • 2015-05-03
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      相关资源
      最近更新 更多