2011-02-01 98 views
2

有一個在Visual Studio 2008中創建並部署到64位Windows 2003服務器的項目。此應用程序引用32位Interop.ActiveDs.dll。這些應用程序最初是爲「任何CPU」編譯的,但是,明確編譯爲「x86」並不能解決問題。該項目的目標是3.5框架。Visual Studio 2008編譯工作; 2010年編譯的相同項目不包含

服務器在64位模式下運行IIS 6.0。當我們部署在Visual Studio 2008中編譯的版本時,應用程序運行得很好;所有頁面都顯示出來。回想起來,這實際上令人驚訝。

我們將應用程序遷移到Visual Studio 2010(我們沒有更改目標框架)並重新部署。現在我們得到一個加載Interop.ActiveDs.dll的BadImageFormatException。這實際上比2008版運行更有意義。

要解決此問題,我們將Enable32bitAppOnWin64設置爲true,並從2.0框架的3​​2位文件夾(根據Web上的各種說明)運行aspnet_regiis.exe -i。在IIS Web服務擴展中,有兩個版本的ASP.NET 2.0,一個用於32位,一個用於64位。我們禁止了64位版本,重新啓動IIS,並啓動了該網站。

我們預期:該應用在32位上運行,加載互操作,並顯示
我們得到:「服務不可用」

所有其他網頁先前的工作顯示相同的消息,就像Visual Studio 2008版本一樣。

支持頁面here確切地描述了這個問題,但告訴我們要做的就是我們做了什麼來解決問題(啓用32位模式)。

我們已經在IIS中回滾到64位模式,並且現在部署了Visual Studio 2008版本,但是我們確實需要弄清楚如何使這個應用程序運行並加載互操作(也有32位被引用的DLL甲骨文)

兩個問題:

  1. 爲什麼在Visual Studio 2008的版本在所有的工作?
  2. 我們如何讓Visual Studio 2010版本正常工作? 2010年做什麼不同導致了這個問題?

在此先感謝!
James

+0

不編譯你的應用程序是一個你可以考慮的選項嗎?我不確定這是否是一種可行的解決方案。 – 2011-02-01 19:22:59

+0

哦,我們在VS 2008中編譯它......它工作正常:\ – 2011-02-01 19:41:42

回答

1

如果您有一個DLL編譯爲64位,另一個DLL編譯爲32位,則可能會發生這種情況。檢查所有的參考資料,並查找那些沒有64位版本的參考資料。如果找不到64位版本的不兼容DLL,則需要在32位模式下編譯。

相關問題