设置针对x86和x64?

时间:2009-04-15 19:51:47

标签: c# installation cpu-architecture

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

  

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

如何让我的设置定位到我的程序这两个平台?

4 个答案:

答案 0 :(得分:11)

安装项目(在Visual Studio中)创建的MSI一次只能定位一个平台。您可以选择制作2个MSI,将它们合并在一起并制作一个可在两者之间进行选择的自定义安装启动板。 有一些第三方产品,例如Advanced Installer,可以为您做到这一点。

答案 1 :(得分:5)

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

  • 使用deflate.exe缩小文件,使用不同的扩展名(例如.x64)命名
  • 将其作为内容文件添加到主项目中
  • 向您的解决方案添加自定义操作项目
  • 将自定义操作添加到安装项目“安装”自定义操作
  • 使用
  • 在自定义操作安装方法中对文件进行充气
  • System.IO.Compression.DeflateStream(参见上面的代码)
  • 在你的桌子周围跳舞,沿着大厅走,然后经过尽可能多的同事骚扰:)

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

答案 2 :(得分:1)

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

唯一不应该使用它的方法是,如果您知道自己的依赖关系或要求对一个体系结构或另一个体系结构不利。例如:你知道你需要ram的 lot ,你对32位本机dll有所依赖,或者你想要预编译应用程序。

这里有一个危险,因为你有一个特定于平台的dll依赖性。但你有两种类型的dll,听起来你知道如何在运行时选择正确的。那么'Any CPU'选项对你有用吗?

答案 3 :(得分:-2)

  1. 打开部署项目。
  2. 在Solution Explorer中,选择部署项目。
  3. 在“属性”窗口中,选择“TargetPlatform”属性。
  4. 为Intel Itanium 64位平台选择Itanium,或为任何其他64位平台(如AMD64和EM64T指令集)选择x64。
  5. 在安装时,如果目标计算机与指定平台不兼容,将引发错误并停止安装。