19

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

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

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

4

4 回答 4

11

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

于 2009-04-15T20:35:24.783 回答
6

我也遇到了这个问题,并写了一篇关于我的解决方案的博客文章:

  • 使用 deflate.exe 对文件进行压缩,使用不同的扩展名(例如 .x64)对其进行命名
  • 将其作为内容文件添加到您的主项目中
  • 将自定义操作项目添加到您的解决方案
  • 将自定义操作添加到设置项目“安装”自定义操作
  • 使用自定义操作安装方法中的文件膨胀
  • System.IO.Compression.DeflateStream(见上面的代码)
  • 绕着你的办公桌跳一段小舞,穿过大厅,越过你想惹恼的尽可能多的同事:)

deflate.exe文件可以从谷歌代码的存储库中下载。

于 2011-07-05T08:14:46.800 回答
1

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

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

这里存在危险,因为您具有特定于平台的 dll 依赖性。但是您对这两种类型都有 dll,听起来您知道如何在运行时选择正确的 dll。那么“任何 CPU”选项对您有用吗?

于 2009-04-15T19:58:02.487 回答
-2
  1. 打开一个部署项目。
  2. 在解决方案资源管理器中,选择部署项目。
  3. 在“属性”窗口中,选择 TargetPlatform 属性。
  4. 为 Intel Itanium 64 位平台选择 Itanium,或为任何其他 64 位平台(例如 AMD64 和 EM64T 指令集)选择 x64。
  5. 在安装时,如果目标计算机与指定平台不兼容,则会引发错误并停止安装。
于 2011-12-21T11:10:30.187 回答