2011-08-25 53 views
3

我有兩個項目。項目A是一個Web項目,項目B是一個數據訪問庫。項目B引用了另一個項目(項目C),以及一些第三方dll,這些dll通過目錄調用「庫」中的文件引用。如果我將項目B作爲項目參考引用,則一切正常。相反,如果我引用輸出到項目B的bin/debug文件夾中的dll,則會生成所有內容,但是我收到以下錯誤,我們在開發Web服務器中內置的錯誤嘗試顯示默認頁面。在Visual Studio 2008中引用dll二進制文件或引用項目時是否有區別?

[BadImageFormatException: Could not load file or assembly 'my_dal.data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.] 

我運行Windows 7 64位操作系統,所以它似乎我有一個32/64位的問題,但我不能看到構建過程是如何工作的一個參考,而不是其他。

回答

2

這是因爲該項目知道它是自己的依賴關係。 DLL不提供視覺工作室也需要提供的依賴二進制文件的信息。無論哪種方式,您都應該將項目引用爲不是二進制文件的項目,因爲當您對其進行更改時,它們會自動更新構建中的DLL。

+0

所有項目B的依賴關係都被複制到它的bin/debug文件夾中,並且我確定我已經引用了所有項目。我想它可能是在System.Data或其他庫中內部創建一個引用,但是我的所有項目都是爲「Any CPU」編譯的,所以我不明白爲什麼會出現二進制不匹配。有沒有任何工具可以用來查看.dll的依賴關係?我明白項目參考是要走的路,但我想從這種情況中儘可能地學習。 –

0

你到達那裏的錯誤指示您嘗試要麼
A)加載64位建立了一個組裝和你的32位
B)加載32位建立了一個組裝和你的64位

你可以通過改變你的項目打造爲「任何CPU」

2

背後爲什麼斌/ debug文件夾中引用該文件的原因而失敗修復這個錯誤是因爲這些文件被消滅了,當你重建/清潔解決方案。在另一個項目中引用項目的最佳方式是將其添加爲項目引用,而不是通過二進制文件。

+0

我已經添加了對項目的引用,但是現在我的構建腳本失敗了,因爲對本地磁盤上項目的引用與構建服務器上的文件結構不同。這是我查看僅引用二進制文件的第一個原因 –

+0

當您將項目B的引用添加到項目A並構建時,它應該將所有必需的dll(包括項目和外部)複製到項目A的bin文件夾。是否可以提供更多關於此的信息? – lcv77

+0

我知道你的意思,但是「構建」發生在我的構建服務器上,而不是我的本地機器上。不幸的是,我的本地機器和構建服務器上的文件夾結構並不相同,因此引用的項目文件的路徑會破壞構建。 –

相關問題