2012-03-26 14 views
17

大家好。我一直在工作中遇到同樣的問題,我正在努力尋找新的途徑。由NUnit項目導致的System.BadImageFormatException

當我的解決方案構建在服務器上時,出現以下錯誤。我在運行/調試解決方案中的所有測試時沒有問題,並且它的構建正常。服務器和我的電腦都是x64。我遵循了很多我發現無濟於事的建議。

我已經在所有配置下的解決方案中將Platform Target設置爲x86。

我知道有一個nunit-console-x86.exe可以使所有的區別,但我不知道在代碼中指定此位置。

請意識到我已經開始關注互聯網,所以如果我錯過了某些東西,請道歉。

System.BadImageFormatException:無法加載文件或組件
'Spin.TradingServices.DataAcquisition.Test.NUnit, 版本= 1.0.12103.2060文化=中性公鑰=空' 或一個 及其依賴的。試圖加載一個 格式不正確的程序。
文件名: 'Spin.TradingServices.DataAcquisition.Test.NUnit, 版本= 1.0.12103.2060,文化=中立,公鑰=空'

服務器堆棧跟蹤: 在System.Reflection.RuntimeAssembly._nLoad(的AssemblyName文件名,字符串的代碼庫,證據assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark & stackMark,布爾throwOnFileNotFound, 布爾forIntrospection,布爾suppressSecurityChecks) 在System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName assemblyRef,證據assemblySecurity,StackCrawlMark & stackMark, 布爾forIntrospection,布爾suppressSecurityChecks) 在System.Reflection.Assembly.Load(的AssemblyName assemblyRef) 在NUnit.Core.Builders.TestAssemblyBuilder.Load(字符串路徑) 在NUnit.Core.Builders.TestAssemblyBuilder.Build(串的AssemblyName,布爾autoSuites) 在NUnit.Core.Builders.TestAssemblyBuilder.Build(字符串的AssemblyName,字符串測試名,布爾autoSuites) 在NUnit.Core.TestSuiteBuilder.BuildSingleAssembly(TestPackage封裝) 在NUnit.Core.TestSuiteBuilder.Build( (TestPackage包) at NUnit.Core.SimpleTestRunner.Load(TestPackage package) at NUnit.Core.ProxyTestRunner.Load(TestPackage package) at NUnit.Core.ProxyTestRunner.Load(Tes tPackage封裝) 在NUnit.Core.RemoteTestRunner.Load(TestPackage封裝) 在System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr的 MD,對象[]指定參數時,對象服務器,的Int32 methodPtr,布爾 fExecuteInContext,對象[] & outArgs) 在System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(即時聊天 味精,的Int32 methodPtr,布爾fExecuteInContext)[0]時

異常重新拋出: 在System.Runtime.Remoting.Proxies。 RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) at System.Runtime.Remoting.Proxies.RealP樂聲。PrivateInvoke(MessageData & MSGDATA,的Int32類型) 在NUnit.Core.TestRunner.Load(TestPackage封裝) 在NUnit.Util.TestDomain.Load(TestPackage封裝) 在NUnit.ConsoleRunner.ConsoleUi.Execute(ConsoleOptions選項) 在NUnit.ConsoleRunner.Runner.Main(String [] args)

WRN:將裝配綁定日誌記錄關閉。要啓用程序集綁定失敗日誌記錄,請將註冊表值 [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)設置爲1.注意:存在 會造成與程序集綁定失敗 日誌記錄相關的一些性能損失。要關閉此功能,請刪除註冊表值 [HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

http://app1017-build.oy.gb.sportingindex.com:8080/job/TradingServices.DataAcquisition-Dev/ws/DataAcquisition/build.proj(86,5): 錯誤MSB6006:「nunit-console.exe」退出,代碼爲-100。完成 建設項目 「 (默認目標)的操作 - 失敗

構建失敗

請注意:。我們已經恢復哈德森我們的建設,現在重新投入更多的逐漸文件,我將如何這正好報到。試圖涉足這一個沒有用了幾個頭很遺憾。可惜!

更新 我還沒有回過此頁一會兒但看起來有很多不同的解決方案。如果我可以將它們全部標記爲我的答案!你們在這裏找到自己的方式應該給每個選項平等的信任。

+0

什麼在運行你的測試? – 2012-03-26 15:46:44

+0

Hudson http://hudson-ci.org/ – 2012-03-26 15:51:25

回答

6

檢查您的程序集的目標框架版本是否與nUnit測試運行器支持相同。 有關支持的運行時的列表,請參閱runFile.exe.config。

此外,如果你有從FW 3到FW 4的複製,它們有不同的運行時間(CLR是不同的)。

+0

我們所有的項目都使用.Net Framework 4.自從我入門以來一直都是這樣。這些測試是在上週進行的,直到星期五做出承諾,並且很難說明已經做出了什麼改變。 受支持的運行時間從v1.0.3705到v 2.0.50727 – 2012-03-26 16:09:33

+0

FW 4運行時間是4. [我不記得下一個:)]運行時間2.xxx是固件2,3,3.5。所以試着這樣看待。更新nUnit,驗證路徑...等 – ili 2012-03-26 16:24:39

+0

是的,我剛剛下載nUnit 2.6後,你提到runFile.exe ... – 2012-03-26 16:34:09

52

我在X64電腦上有一個控制檯應用程序出現此問題, 生成設置爲x86,它仍然崩潰。 我進入控制檯應用程序的屬性,並在構建下我將我的平臺目標從x86更改爲任何CPU,然後突然所有的測試工作併成功運行。

值得注意的是,配置管理器的平臺字段可以「說謊」給你,並且實際上並不需要反映項目的屬性實際配置的內容。我的配置管理器說「Common.dll」被構建爲「任何CPU」,但項目屬性(真正重要的設置)將其構建爲「x86」。

enter image description here

+0

是的,我認爲我們一定試過這個。事實證明,這是我們項目中沒有人蔘與的一個完全無關的部分。所以我們評論它(現在未使用),它的工作......沒有學到什麼! – 2012-04-13 12:58:01

+0

+1任何CPU更改也爲我解決了它。 – 2012-08-09 14:50:10

+2

+1任何CPU更改修復它也爲我:) – 2013-03-18 05:29:49

1

感謝Ashes999吵醒我。

此問題確實再次返回。回滾和上傳並沒有奏效。它原來是我們不再使用的監視器對象。評論和修復。

找到這個的方法是通過調試所有單元測試。在所有地方暫停修復。如果t不停頓,那麼錯誤。

+0

感謝您的詳細信息。我甚至不使用顯示器,所以這並沒有解決我的問題。我會發布我自己的答案。 – ashes999 2012-05-03 18:14:30

3

這聽起來很愚蠢,但請檢查您的項目和處理器架構。在我的情況下,我在上運行64位測試,我認爲它是64位機器(因爲它正在構建64位項目)。

猜猜是什麼?它實際上是一個32位機器。所以NUnit.exe以32位(顯然)運行,並且無法理解64位測試。

解決方案?構建x86和x64版本的測試,並在x86機器上運行x86,在x64機器上運行x64。

明顯。但值得檢查。

5

我經常遇到這種情況,當我測試控制檯或WPF應用程序。有幾個原因

  • 首先,確保你的應用程序不能在.Net框架3或4個客戶的個人資料
  • 然後比較兩者的應用和測試項目的目標框架.NET版本上運行。它們應該是相同的
  • 檢查生成選項卡上的平臺目標。他們應該是一樣的。例如,如果測試項目具有「任何CPU」目標,則該應用程序必須具有「任何CPU」。
+0

這對我有效。 – user85 2017-01-27 17:11:59

3

對我來說,這個例外是由nunit的無效/process=single引起的。如果我改變的值,然後異常消失:

/process=separate 

/process=multiple 

P/S:遲到的回答,但僅作參考..

9

A小調除了所有答案。您可能需要更改NUnit亞軍平臺(對我來說是Resharper),因爲它本身就是我的情況。 查看示例 enter image description here

2

我的情況有點不同。運行已修改的單元測試後,該錯誤顯得非常隨機。

我刪除了測試,錯誤消失了。

我重新創建測試並返回錯誤。

我重命名了測試,錯誤消失了。

我將測試重命名並且問題沒有再發生。

希望這會有所幫助!

1

對於任何人仍然有這個問題,你可能還需要在現場設置測試運行框架場以匹配您包含項目的一個(只是一個由AlexM引用的權利)。

就我而言,我正在爲Windows Phone 8庫編寫測試套件,NUnit無法正確計算出它應該使用的框架版本。

5

確保此設置正確:測試菜單 - >測試設置 - >默認處理器架構 - > x64/x86。 這是不正確的,在我的情況下,它同樣的問題失敗。

+0

我的參考是在這裏:https://github.com/nunit/nunit-vs-adapter/issues/16 – MaurGi 2015-04-07 00:15:20

+0

謝謝,拯救我的一天 – 2016-07-25 22:24:20

+0

完美這是工作設置:) – Neo 2016-08-24 06:12:58

相關問題