2011-02-01 154 views
0

我正在開發一個ASP.NET應用程序,並試圖在我的64位win 7機器上使用64位驅動程序版本的ODBC,因爲部署服務器具有Windows Server 2008,它是自然在64位,因爲微軟決定不做一個32位版本afaik。Win 7和ODBC的64位

的第一個問題是一個System.Data.Odbc.OdbcException「ERROR [IM014] [微軟] [ODBC驅動程序管理器]指定的DSN包含驅動程序和應用程序之間的結構不匹配」。儘管我正在開發一個64位操作系統,但編譯器似乎決定編譯32位。經過一些研究後,我將每個(自己的)程序集中的目標平臺更改爲x64。我使用的是NHibernate和Spring.Net,但是我讀了一些對於NHibernate來說64位沒有問題的地方。我沒有檢查Spring.Net。彙編開始了。

我收到了一些警告,說每個.net程序集都是爲另一個平臺而構建的,但我再次在某處讀到我可以忽略這些警告,並且應用程序應該運行得很好,因爲運行時(或編譯器?)會計算出正確的組裝。

因此,我立即測試了應用程序,並獲得System.BadImageFormatException(錯誤格式)的獎勵。這又是一個關於32/64位問題的例外,雖然我的每個程序集都被編譯爲64位。

我慢慢開始討厭64位。認真。在具有64位驅動程序的64位服務器的64位操作系統上構建64位應用程序很困難嗎?

有沒有人有解決方案或有這方面的經驗?我發現了許多使用32位的解決方法,但這不是一個選項。它必須是一個64位解決方案。

不過我會繼續努力解決這個問題。我會在這裏寫下任何進展。

更新: Spring.Net似乎因爲組件「在運行時動態編譯爲本地機器架構」是在64位就好了。

回答

0

我通常會嘗試其他方式:如果我不需要任何本地進程內DLL,我使用AnyCPU。所以最終的程序可以在x86和x64上使用。如果我需要本地進程DLL,我總是選擇x86 32位版本,因爲它使得它正常工作更容易,並且重要的是我不需要任何64位功能。那麼爲什麼64位版本?我只是去IIS配置和設置我的asp.net應用程序運行在32位模式。

例如,我目前的開發環境完全是64位,並且工作完美。但我的生產服務器設置爲在32位模式下託管我的應用程序。它完美的工作,沒有64位的問題。我很抱歉,如果這個答案不適合你,但我真的不需要我的asp.net應用程序中的64位的東西。

更新:我在生產服務器上使用32位IIS。我不確定是否可以在64位IIS中將asp.net設置爲32位。

+0

不幸的是它是關於組件之間的兼容性(應用程序<-> 64位odbc驅動程序)而不是64位的東西。但我讀了32位模式,但我寧願想想那是我的最後一招。 – Robert 2011-02-01 19:55:25

1

我打了幾個小時這個相同的錯誤。我的環境稍有不同,但錯誤是一樣的。我在Win Server 2008 R2 x64 Box上使用SSRS,Report Builder 3和SQL Server 2008 R2 我可以創建連接並在SSRS中成功測試它們,但是當我使用它們時,我得到了上述錯誤。當我創建一個具有相同名稱和參數的32位DSN時,它已經解決了。