2012-11-21 119 views
2

我在Windows 7 Pro專用構建機器上設置了CruiseControl.NET(v 1.6.7981.1)。 我有一個VS2012項目設置來建立,然後使用Gallio.Echo.exe運行MBUnit測試。 我的問題是,當CC.NET運行這些測試時,它在其中的幾個失敗,但是當我從命令行運行完全相同的程序,具有完全相同的dll測試,每一個測試通過。我似乎無法弄清楚發生了什麼事。任何人都可以解釋爲什麼一些測試可能會失敗時,CruiseControl運行它們,但通過時,我運行它們?我已經嘗試在CruiseControl服務運行的相同帳戶下運行它們,所以我不認爲它是一個權限問題。我甚至試過把它關掉再打開(機器)。測試在CruiseControl中失敗,但在運行時成功

CruiseControl作爲具有管理權限的登錄的Windows服務運行。 我們的VS項目是一個.NET 4.0桌面應用程序,但我們已經包含了一個以前爲.NET 3.5構建的舊項目,已升級到.NET 4.0。該項目引用了Microsoft.Ink程序集(v 6.1.0.0),並且我確認這是在構建機器上的GAC中。事實上,失敗的測試正在測試使用該程序集的應用程序的一部分。 我們計劃稍後替換這個遺留項目,但現在必須接受它。

下面是測試報告中CruiseControl的錯誤:

System.Runtime.InteropServices.COMException:災難性故障(從HRESULT異常:0x8000FFFF(E_UNEXPECTED)) 錯誤碼:-2147418113 微軟。在的.vb Ink.InkOverlayClass.set_Enabled(布爾採集) 在Microsoft.Ink.InkPicture.set_InkEnabled(布爾值) 於:線1201 .......

這裏是(VB.NET )代碼在哪裏它fai LS

Dim inkPictureObject As New Microsoft.Ink.InkPicture() 
... 
inkPictureObject.InkEnabled = False 
inkPictureObject.Ink = New Ink() 
inkPictureObject.InkEnabled = True '<-- fails here 

我似乎無法找到除了這個錯誤(COMException occurred: ErrorCode = -2147287036),這(Only while running on VS 2010: COMException: Catastrophic Failure: Error Code: -2147418113)的任何信息均未我還沒有發現有用的,因爲我不分配資源,我有沒有問題時,當我在VS2012中運行程序時,我擊中了那條線。真正的kicker是(如前所述),當我使用與CruiseControl配置中指定的參數相同的參數從命令提示符(以與CruiseControl服務運行時相同的用戶登錄)運行測試時,測試完美地工作。

Gallio.Echo.exe/RNF:測試報告/ RT:XML的內聯/ V:安靜的 「C:\我的項目\ testAssembly.dll」

任何幫助將不勝感激。

+0

您的ccnet服務是否作爲Windows服務運行? –

回答

1

嘗試從命令提示符運行ccnet並查看測試是否失敗或通過。我想你只需要執行ccservice.exe

如果ccnet作爲windows服務運行,我可以理解爲什麼這可能會失敗。 Windows服務不能*創建一個新窗口。

此Microsoft文檔http://msdn.microsoft.com/en-us/library/aa514604.aspx指出InkPicture是一個c#封裝器,它創建一個窗口來顯示和與圖片進行交互。

The run time user interface for this control is a window with an opaque background (single color, picture background, or both) that contains opaque ink.

*運行系統爲Windows服務,可以設置爲允許interaction with the desktop允許窗口的創建。雖然支持顯然正在分階段,但由微軟。

+0

謝謝西蒙。事實上,當我在停止ccnet windows服務並運行ccnet.exe控制檯後強制構建時,測試成功了。爲了仔細檢查,我關閉了控制檯並重新啓動了服務,並再次強制構建:測試失敗。我還沒有試過改變服務登錄來使用啓用桌面交互的本地系統,因爲我不想改變我們如何設置它,所以我會考慮重新編寫遺留代碼,以便我可以嘲笑它;我想盡可能避免修改遺留代碼,但看起來它可能是最好的方法。再次感謝。 – Shifter

相關問題