2012-07-06 33 views
257

我有兩個項目,ProjectAProjectBProjectB是一個控制檯應用程序,它取決於ProjectA。昨天,一切都被今天的工作正常,但突然當我運行ProjectB我得到這個:無法加載文件或程序集...嘗試加載格式不正確的程序(System.BadImageFormatException)

BadImageFormatException了未處理
無法加載文件或程序集「項目A,版本= 1.0.0.0,文化=中性,PublicKeyToken = null'或它的一個依賴關係。試圖加載格式不正確的程序。

兩者都只是常規項目,沒有任何其他non.Net項目的依賴。兩者都完全.Net - 沒有本地代碼,也沒有P/Invoke。我有其他項目取決於ProjectA,仍然工作得很好。

事情我已經嘗試:

  • 確保這兩個項目都設置爲「任何CPU」,與構建複選框選中。他們是。
  • 確保兩個項目都是針對相同的目標框架(.Net 4.0客戶端配置文件)
  • 在項目B - >參考 - >項目A - >屬性,確保「複製本地」設置爲「真」 _ (我覈實,ProjectA.dll被正確拷貝)
  • 清潔/重建解決方案。我甚至嘗試在兩個項目中手動刪除/ bin和/ obj文件夾。
  • 重新啓動Visual Studio。重新啓動我的電腦。
  • 檢出版本庫的全新副本。

但我仍然得到相同的錯誤。我不知道我是如何做到這一點的,也不知道如何解決這個問題。有任何想法嗎?

+0

,你可以檢查是否有在的csproj文件有哪些區別? – Steve 2012-07-06 22:22:26

+0

@Steve:根據Mercurial的說法,除了添加對新的.cs文件的引用之外,沒有其他更改 – 2012-07-06 22:23:12

+0

您是否在另一臺機器上獲得相同的行爲?計算機上是否有其他更改(例如,Windows更新,依賴關係更新等)? – 2012-07-07 00:44:19

回答

418

我很確定你有32位/ 64位衝突。這聽起來像你的主項目可能被設置爲32位,而其參考的類設置爲64位。試着看看this SO questionthis one too。在他們兩個之間,你應該能夠弄清楚你的問題。

+49

Do'h。我以某種方式在'project - > properties - > build'中完全丟失了「platform target」下拉菜單 - 它已經設置爲x86;將其設置爲「任何CPU」解決了此問題。我一直認爲這個設置與配置管理器中的「平臺目標」下拉菜單相同,但顯然它不是*(事實上,配置管理器中的「平臺目標」似乎根本沒有做任何事情!)* – 2012-08-03 22:07:36

+6

同時驗證該項目不是任何CPU與首選32位檢查。項目 - >屬性 - >構建 – 2013-11-18 18:34:39

+5

你ROCK!我花了幾個小時嘗試各種各樣的事情,但是當我將CPU目標更改爲x86時,它可以工作(因爲我引用的Interops當然是32位的)。 – 2014-03-13 16:58:40

22

我有這個相同的問題。我將Project A的「Platform Target」(「Project A」(右鍵單擊) - > Properties - > Build - >「Platform Target」)設置爲x86,但保留了Project B的「Any CPU」。將項目B的設置爲「x86」解決了這個問題。

+0

中設置這解決了我的問題,我不得不將我的兩個項目都保存爲「任何CPU」。似乎有人在我的代碼庫中更改了.csproj文件 – 2017-12-26 20:47:49

2

我在同一個解決方案中遇到了多個項目的相同問題,我最終將目標框架的所有目標框架都設置爲.NET Framework 4和x86,並且最終成功編譯了它。

+1

在Release中工作,但在Debug中失敗。將全部設置爲.Net Framework 4(不是更新1),並立即運行調試。 – DCastenholz 2016-01-20 02:43:57

1

我遇到了同樣的問題。它突然出現,這對我來說似乎很陌生。

在例外的快照,對於FusionLog,我看到了它的消息中的以下內容:

... C:\ WINDOWS \ Microsoft.NET \ Framework64 ...

更多關於融合日誌:http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx

所有項目都AnyCPU的目標CPU。我將應用程序項目(引用所有其他項目的項目)更改爲x86的目標CPU。現在起作用了。

不知道目標CPU混淆如何發生沒有明顯的原因,但它確實如此。

6

如果您的項目中至少有一個32位dll \ exe,則可能需要更改應用程序池在IIS7中將「啓用32位應用程序」設置爲TRUE。

+0

OP是在談論一個控制檯應用程序而不是IIS – MickyD 2016-02-03 11:20:49

133

在服務器上進行部署後,您可能正面臨網站問題。

然後,您需要將您的應用程序池調整爲啓用32位應用程序。

步驟:

  1. 打開IIS管理器
  2. 點擊應用程序池
  3. 選擇任何應用程序池使用的是
  4. 從右側窗格中,單擊高級設置...
  5. 設置啓用32位應用爲真

enter image description here

+0

我錯過了什麼嗎? OP討論的是_console app_而不是IIS部署:_「ProjectB是一個控制檯應用程序,它依賴於ProjectA」_ – MickyD 2016-02-03 11:19:57

+2

我沒有32位/ 64位衝突,回答,我的問題已經過去了' – 2016-07-12 13:14:33

+1

非常感謝!我在Pechkin不工作時遇到了麻煩。 – CareTaker22 2016-10-28 06:36:15

1

我也面臨這個問題在一個項目中,幾分鐘後,我找到了解決辦法, 這個問題是由於CPU的配置, 如果使用的Visual Studio 2010或VS 2013,只是轉到項目「小號性質,然後選擇從側欄編譯會有5下拉,第5下拉將目標CPU:,你應該把它根據您的要求,而不是設置爲x86或x64任何CPU。

將其更改爲x86後,我的問題得到解決。

0

它可以是一個有點滑稽,但我有與正常工作代碼相同的問題。我添加了StreamWriter和StreamReader,它給了這個錯誤。 解決方案是我把該代碼放入註釋括號,然後進行調試,並開始重新工作

63

我剛剛在Visual Studio 2015中運行IIS Express的此錯誤消息。在我來說,我需要運行IIS快遞的64位版本:

工具 - >選項 - >項目和解決方案 - > Web項目
檢查,說:「使用的64位版本的包裝盒 IIS Express for web站點和 項目「。

截圖:

Screenshot of VS options for Web Project.

+0

我不相信這甚至需要發生。爲什麼它不會根據項目設置檢測到64位。微軟在夜間讓我哭泣 – schmoopy 2017-02-02 06:14:09

+0

恰恰相反,我有'使用64位'打勾並需要將它解開...... – cjb110 2017-03-14 08:21:33

+0

謝謝!我檢查了所有的構建設置,甚至經歷了所有的依賴關係。啊。 – bouke 2017-03-17 10:16:38

1

這也可以只通過具有多個支持框架的app.config文件中定義,並迫使應用程序在不同的.NET運行發生除了在app.config文件中首先提到的一個以外的框架。

而且當你在你的系統中提供了兩個提到的框架時,這也會引發火災。

作爲一種變通方法,帶來了你要在App.config爲調試使用了目標框架

例如:如果你想在.NET 4運行配置文件中應該有類似的東西對此,

<supportedRuntime version="v4.0"/> 
<supportedRuntime version="v2.0.50727"/> 
1

在我的項目的C#,項目屬性 - > [構建] - >目標平臺:任何CPU, 並取消身高32位,讓編譯器自動選擇。

6

我有這個問題,運行單元測試(的xUnit)在Visual Studio 2015年和整個以下修補程序來:

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64 
0

我的機器給我一個BIOS更新,我不知道如果有事情做與突然出現這個錯誤。更新完成後,錯誤得到解決,解決方案生成良好。

2

這些解決方案都不適用於我 - 但通過刪除bin和obj文件夾的內容,一切都變得很酷了。

2

我在通過Visual Studio Online(VSTS)構建項目使用Visual Studio Build構建項目時得到了此步驟。

將溶液:

  • 刪除現有的源文件夾
  • 明確設置在該平臺的任何CPU'的所有Visual Studio構建包括依賴關係(參見下圖)。
  • 重新運行構建

VSO Screenshot

0

奇爾卡特.NET 4.5組裝需要將任何一臺計算機在您的應用程序運行所安裝的VC++ 2012或2013年運行。大多數電腦已經安裝。您的開發計算機將擁有它,因爲Visual Studio已安裝。但是,如果部署到所需的VC++運行時無法使用電腦,就會出現上述錯誤:

安裝所有波紋管包

的Visual C++可再發行的Visual Studio包2013 - vcredist_x64

的Visual C++可再發行的Visual Studio 2013軟件包 - vcredist_x86

的Visual C++可再發行的Visual Studio 2012包 - v credist_x64

的Visual C++可再發行的Visual Studio包2012 - vcredist_x86

0

首先,我在VS2017中得到了一箇舊項目,我需要做一個微小的更改並將所有項目升級到框架4.7。


其他幾個人提到選擇Any CPU可以解決這個問題。

有幾個地方你需要做它,它可能不僅僅是從下拉列表中選擇一樣簡單。這個固定爲我:

1)你必須在這裏做它既:

enter image description here

2),並在Configuration Manager(右鍵單擊解決方案)

enter image description here

但如果它不在那裏?

然後點擊New,選擇這些設置:如果您在資源庫中有一個版本歷史記錄(thanks @RckLN

enter image description here

相關問題