2009-04-15 73 views
17

我有一個既需要x64和x86的DLL(它的數字出來,它需要在運行時哪些)節目,但是,試圖創建一個安裝時,它抱怨:針對x86和x64的安裝程序?

文件AlphaVSS.WinXP.x64。 dll'與'thunder'目標平臺'x86'不兼容
文件AlphaVSS.Win2003.x64.dll'定位'AMD64'與th項目的目標平臺'x86'不兼容
File AlphaVSS.Win2008。 x64.dll'定位'AMD64'與th項目的目標平臺'x86'不兼容

我如何使我的設置像我的程序一樣針對兩個平臺?

回答

11

安裝項目(在Visual Studio中)創建的MSI一次只能針對一個平臺。你的選擇是做2個MSI,將它們合併在一起,然後製作一個自定義的啓動過濾器,在兩者之間進行選擇。 有一些第三方產品,例如Advanced Installer,可以爲您做到這一點。

2

.Net有一個「任何CPU」選項。很容易把它看作更多的只是使用較小的x86功能的「通用」選項,但實際上它可以讓每臺機器上的JIT編譯器爲該機器選擇合適的CPU類型。

你不應該使用它的唯一時間是如果你知道你有依賴或要求不適合一個架構或其他。例如:你知道你需要一個ram的批次,你對32位原生dll有依賴性,或者你想預編譯應用程序。

這裏有一個危險,因爲你有一個特定於平臺的dll依賴。但是你對這兩種類型都有DLL,這聽起來像你知道如何在運行時選擇正確的DLL。那麼'任何CPU'選項都適合你嗎?

+0

我的項目設置爲任何,但是,安裝程序不允許該選項。一個安裝項目屬性TargetPlatform,我可以選擇x86,x64和Itanium。沒有任何。 – Malfist 2009-04-15 20:01:53

+0

嗯....安裝項目包括一個本地.exe文件來引導安裝,以防.Net尚未出現。這可能是限制因素。 – 2009-04-15 20:04:51

+0

在這種情況下,您可以使用包含兩套dll的32位(x86)安裝項目進行測試嗎?安裝項目仍然應該在x64和x86系統上運行,如果事情正常,你可能仍然會在適當的時候獲得x64代碼。 – 2009-04-15 20:06:16

5

我跑進這也和wrote a blog post關於我的解決方案:

  • 使用deflate.exe縮小文件,擴展名不同命名它(例如.x64)
  • 將它添加到您的主項目爲內容文件
  • 自定義操作項目添加到您的解決方案
  • 添加自定義動作的設置項目「安裝」自定義操作
  • 膨脹的自定義操作裏面的文件,安裝我使用的ThOD
  • System.IO.Compression.DeflateStream(見上面的代碼)
  • 做一個小舞在你的辦公桌,在大廳,和過去的作爲,你關心的許多同事騷擾:)

在谷歌代碼上可以從其repository下載deflate.exe文件。

-2
  1. 打開部署項目。
  2. 在解決方案資源管理器中,選擇部署項目。
  3. 在「屬性」窗口中,選擇TargetPlatform屬性。
  4. 選擇Itanium作爲Intel Itanium 64位平臺,或選擇x64作爲任何其他64位平臺(如AMD64和EM64T指令集)。
  5. 在安裝時,如果目標計算機與指定平臺不兼容,則會引發錯誤並停止安裝。
相關問題