2013-12-12 39 views
0

我的小應用程序做兩件事情似乎發生衝突:.NET項目需要在x64和x86下構建嗎?

1)使用VFPOLEDB.1談Visual FoxPro數據庫來獲取一些數據 - >它需要應用生成器在x86或「任何CPU」

2 )然而,還有一個函數可以調用powershell腳本來訪問服務器的IIS,並且它需要在x64中構建項目。 (或者.Net啓動powershell時,它會對哪個版本感到困惑,並會拋出一些COM對象類而不會發生寄存器錯誤)

我該如何處理這個衝突問題?

+0

如果您需要在需要調用Powershell的同一系統上調用visual foxpro,那麼「任何cpu」都不會有幫助 - 64位系統上的任何cpu都將作爲64位可執行文件運行,所以如果你的依賴是32位的,它仍然無法加載。 –

+0

正確,所以實際上一個必須是x86和另一個是x64,這是衝突:( – Samuel

+0

什麼是您的部署方案?這是一個一次性工具嗎?我真的認爲使用COM +服務器可能會滿足您的需求,如果你不'不要在大量機器上實際管理它 –

回答

3

我不完全確定,但也許你可以通過分割你的項目來做到這一點。一個項目是x86,執行FoxPro調用,另一個調用x64並調用Powershell,第三個調用兩個主項目。

+3

請注意,雖然這可能工作,如果所有三個都是.exes,如果兩個被調用的項目被構建爲庫,它將不起作用 - 它們仍然會加載爲錯誤的位 –

+0

是的,我同意如果只是項目在不同的版本並使用dll作爲參考,它仍然會失敗,因爲它只計算主要的exe版本。 – Samuel

2

每微軟:

的VFP OLEDB驅動程序是32位的,並且不能與在64位模式的.NET 2.0 CLR運行使用。我的理解是,沒有計劃提供64位版本的VFP oledb驅動程序。 [Source]

總之,你不會在64位模式下使用它;努力解決你的COM對象錯誤併爲x86構建。您的其他選項可能是爲FoxPro部分生成一個獨立的可執行文件,並讓您的主應用程序獨立執行它(但最終會生成virtualized)。

0

我覺得這樣做的另一個選擇是使用COM +和後期執行模型,其中COM對象實際上是由COM +服務器而不是直接由應用程序管理的。

相關問題