2008-10-16 197 views
27

我在Vista 64位,並且我有一個使用x86配置構建的項目。一切正常。現在,我們正在創建測試。我們有NUnit 2.4.8,但是我們有很多問題。如果x86構建的Nunit.exe無法在Vista 64位上工作

當我們直接選擇.dll但是執行時我們有system.badimageformatexception時,測試正在加載槽Nunit.exe(gui)。

我已經通過在Google上搜索關於nunit.exe.config的幾個技巧,但沒有工作。 (更改爲UTF8 ... uncomment .net版本用於啓動)。

有什麼想法?

更新

我有乾淨的解決方案,並清除所有BIN文件夾中。現在,當我編譯時,我清楚地看到我的bin目錄中只有/ x86 /而不是x64中的舊/ debug /。

當我和NUnit的去我(在加載)異常:System.IO.FileNotFoundException ...

服務器堆棧跟蹤:在System.Reflection.Assembly._nLoad(的AssemblyName文件名 ,串的代碼庫,證據assemblySecurity,裝配locationHint,StackCrawlMark & stackMark,布爾throwOnFileNotFound,布爾forIntrospection) 在System.Reflection.Assembly.InternalLoad(的AssemblyName assemblyRef,證據assemblySecurity,StackCrawlMark & stackMark,布爾forIntrospection) 在System.Reflection.Assembly。 InternalLoad(字符串assemblyStrin克,證據assemblySecurity,StackCrawlMark & stackMark,布爾forIntrospection) 在System.Reflection.Assembly.Load(字符串assemblyString) 在NUnit.Core.Builders.TestAssemblyBuilder.Load(字符串路徑) 在NUnit.Core.Builders.TestAssemblyBuilder。建立(字符串的AssemblyName,布爾autoSuites) 在NUnit.Core.Builders.TestAssemblyBuilder.Build(字符串的AssemblyName,字符串測試名,布爾autoSuites) 在NUnit.Core.TestSuiteBuilder.BuildSingleAssembly(TestPackage封裝) 在NUnit.Core.TestSuiteBuilder。 NUnit.Core.SimpleTestRunner.Load(TestPackage包) NUnit.Core.ProxyTestRunner.Load(TestPackage包) NUnit.Core.ProxyTestRunner.Load(Tes())構建(TestPackage包) tPackage包) at NUnit.Core.RemoteTestRunner.Load(TestPackage包) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md,Object [] args,Object server,Int32 methodPtr,Boolean fExecuteInContext,Object [] & 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.RealProxy.PrivateInvoke(MessageData & msgData,Int32 type) at NUnit.Core.Te stRunner.Load(TestPackage包) 在NUnit.Util.TestDomain.Load(TestPackage包) 處的NUnit.Util.TestLoader。負載測試(字符串測試名)

更新2

我與我已經修改是x86,而不是任何的x64 CPU編譯。原因是爲debug。這已經在前面的鏈接中討論過了。我要確認NUnit的是64位模和Corflags.exe

回答

52

好吧,我發現在這website的解決方案。你必須使用\ NUnit的-2.4.8 \ BIN \ NUnit的-x86.exe程序,而不是\ NUnit的-2.4.8 \ BIN \ nunit.exe ......不知道的\ bin \有2 NUnit的! !

THX所有

5

NUnit的主機可能運行的64位進程中運行(您可以通過查看任務管理器確認)。如果你的程序集只有x86,那麼它將無法在該進程中運行。

您可以嘗試在NUnit的可執行運行corflags,迫使它運行的x86,你爲什麼要使用的x86配置上並沒有任何CPU使用/ 32位+標誌

+0

你是對的,我沒有看到Nunit.exe後的* 32。我會檢查你的鏈接,並會回覆給你。提示+1! – 2008-10-16 15:37:12

+0

不起作用。我試着在其他文件上運行。但是Nunit沒有。我有錯誤CF001:無法打開文件進行寫入。該文件不是隻讀的... – 2008-10-16 15:45:10

0

我想像,當你加載的NUnit它已經建成與任何CPU選項,這樣即時編譯到x64代碼。當它試圖加載專門編譯爲x86的測試時,它會拋出異常。

我想嘗試改變你的所有配置設置的任何CPU,看看是否能解決您的問題。

+0

任何Cpu已被更改爲X86。我在任何Cpu上運行...不在x64上,因爲我無法在X64上使用斷點和編輯進行調試。 – 2008-10-16 15:45:53

4

從TeamCity的3.1與MSBuild的運行平臺的構建服務器升級到4.0時,也會發生這種情況設置爲86。 TeamCity runner似乎在4.0版本中以不同於3.1的方式默認了平臺,而不是承認構建運行x86的事實。

在我而言,這工作是增加一個平臺覆蓋到我的MSBuild腳本NUnit的調用的第一個補丁:

 
&ltNUnit Assemblies="Test/bin/$(Platform)/$(Configuration)/Test.dll" Platform="x86" />

(即,迫使32位中的其他的TeamCity的測試運行方式建議)

(這包括當測試程序集的平臺目標是任何CPU時(雖然它發生時我已經將它們明確地設置爲x86,因爲一些測試動態加載了受限於x86的DLL))。

0

如果使用TeamCity的,你可以用值在你的TeamCity項目的配置設置生成的參數(在屬性和環境變量部分)添加屬性teamcity.dotnet.nant.nunit2.platform

0

與TeamCity 8.1有同樣的問題。什麼解決它正在改變NUnit的生成步驟。NET運行/平臺:

我也必須從改變運行測試:路徑從TestProject \ BIN \發佈TestProject \ BIN \ 86 \釋放

相關問題