2012-11-21 121 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

相关问题