【问题标题】:Setup targeting both x86 and x64?针对 x86 和 x64 的设置?
【发布时间】:2010-10-19 16:46:49
【问题描述】:

我有一个同时需要 x64 和 x86 dll 的程序(它会在运行时确定它需要哪些),但是在尝试创建设置时,它会抱怨:

针对 'AMD64' 的文件 AlphaVSS.WinXP.x64.dll' 与项目的目标平台 'x86' 不兼容
以“AMD64”为目标的文件 AlphaVSS.Win2003.x64.dll 与项目的目标平台“x86”不兼容
以“AMD64”为目标的文件 AlphaVSS.Win2008.x64.dll 与项目的目标平台“x86”不兼容

如何让我的设置像我的程序一样针对两个平台?

【问题讨论】:

    标签: c# installation cpu-architecture


    【解决方案1】:

    安装项目(在 Visual Studio 中)创建的 MSI 一次只能针对一个平台。您的选择是制作 2 个 MSI,将它们合并在一起,然后制作一个自定义设置引导程序,在两者之间进行选择。 有一些 3rd 方产品,例如 Advanced Installer,可以为您做到这一点。

    【讨论】:

      【解决方案2】:

      我也遇到了这个问题,wrote a blog post 关于我的解决方案:

      • 使用 deflate.exe 压缩文件,使用不同的扩展名(例如 .x64)命名它
      • 将其作为内容文件添加到您的主项目中
      • 将自定义操作项目添加到您的解决方案中
      • 将自定义操作添加到设置项目“安装”自定义操作
      • 使用
      • 在自定义操作安装方法中膨胀文件
      • System.IO.Compression.DeflateStream(见上面的代码)
      • 在你的办公桌周围、走廊的另一头、以及你想惹恼的尽可能多的同事身边跳一段小舞 :)

      deflate.exe 文件可以从其repository 上的谷歌代码下载。

      【讨论】:

      • 这是一个绝妙的主意,我最近在一个项目中使用它。一个复杂的问题:如果您的自定义操作在展开压缩文件后删除了它(或者您提取了 zip 文件的内容然后删除了 zip 文件),并且您的安装程序会安装快捷方式。默认情况下,会公布快捷方式,这意味着当您启动它们时,系统将检查安装是否完好,并在发现压缩文件丢失时重新运行安装程序。您需要更改 msi 文件,以便不公布快捷方式。
      【解决方案3】:

      .Net 有一个“任何 CPU”选项。很容易将其视为更多的“通用”选项,它将仅使用较少的 x86 功能,但实际上它允许每台机器上的 JIT 编译器为该机器选择合适的 cpu 类型。

      唯一不应该使用它的情况是,如果您知道自己有不适合一种架构或另一种架构的依赖项或要求。例如:你知道你需要一个 lot 的 ram,你依赖于 32 位原生 dll,或者你想预编译应用程序。

      这里有一个危险,因为你有一个特定于平台的 dll 依赖关系。但是您对这两种类型都有 dll,听起来您知道如何在运行时选择正确的 dll。那么“任何 CPU”选项是否适合您?

      【讨论】:

      • 我的项目设置为任何,但是,设置不允许该选项。一个安装项目,属性 TargetPlatform,我可以选择 x86、x64 和 Itanium。没有任何。
      • 嗯.... 安装项目包含一个本地 .exe 文件,用于引导安装,以防 .Net 尚不存在。这可能是限制因素。
      • 在这种情况下,您能否使用包含两组 dll 的 32 位 (x86) 安装项目进行测试?安装项目仍应在 x64 和 x86 系统上运行,如果一切正常,您可能仍会在适当的位置获得 x64 代码。
      • 安装程序不会针对 x86 进行编译。仅针对 x64。 (因我在问题中陈述的错误而失败。)
      • 嗯...您应该能够让它将这些文件视为“内容”而不是某种代码,但设置项目并不是我需要经常玩的东西如何。
      【解决方案4】:
      1. 打开一个部署项目。
      2. 在解决方案资源管理器中,选择部署项目。
      3. 在“属性”窗口中,选择 TargetPlatform 属性。
      4. 为 Intel Itanium 64 位平台选择 Itanium,或为任何其他 64 位平台(例如 AMD64 和 EM64T 指令集)选择 x64。
      5. 在安装时,如果目标计算机与指定平台不兼容,则会引发错误并停止安装。

      【讨论】:

      • 这如何回答这个问题?
      • 人们得到了他们想要解决的问题,你有解决方案请提供,不要和答案陈述同样的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多