我在Windows 7 Pro专用构建机器上设置了CruiseControl.NET(v 1.6.7981.1)。 我有一个VS2012项目设置来构建,然后使用Gallio.Echo.exe运行MBUnit测试。 我的问题是,当CC.NET运行这些测试时,它会在其中一些测试中失败,但是当我从命令行运行完全相同的程序时,其参数与CC任务中指定的完全相同的参数完全相同的dll包含测试,每一次测试都通过。我似乎无法弄清楚发生了什么。任何人都可以解释为什么某些测试可能会失败,当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)) ErrorCode:-2147418113 at Microsoft.Ink.InkOverlayClass.set_Enabled(Boolean Collecting) 在Microsoft.Ink.InkPicture.set_InkEnabled(布尔值) at .vb:line 1201 .......
这是失败的(VB.NET)代码
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中运行程序时遇到该行没有问题。真正的踢球者(如前所述)当我从命令提示符(以与运行CruiseControl服务相同的用户身份登录)运行它们时,测试工作正常,其参数与CruiseControl配置中指定的参数相同。
Gallio.Echo.exe / rnf:test-report / rt:Xml-Inline / v:Quiet“C:\ My project \ testAssembly.dll”
非常感谢任何帮助。
答案 0 :(得分: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
允许创建窗口。虽然支持显然是分阶段但微软。