我在 Windows 7 Pro 专用构建机器上设置了 CruiseControl.NET (v 1.6.7981.1)。我有一个 VS2012 项目设置来构建然后使用 Gallio.Echo.exe 运行 MBUnit 测试。我的问题是,当 CC.NET 运行这些测试时,其中一些测试失败了,但是当我从命令行运行完全相同的程序时,使用与 CC 任务中指定的参数完全相同的参数,在包含测试,每一个测试都通过。我似乎无法弄清楚发生了什么。谁能解释为什么某些测试在 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))错误代码:Microsoft.Ink.InkOverlayClass.set_Enabled(布尔收集)在 Microsoft.Ink.InkPicture.set_InkEnabled(布尔值)的 -2147418113 .vb:第 1201 行.......
这是失败的(VB.NET)代码
Dim inkPictureObject As New Microsoft.Ink.InkPicture()
...
inkPictureObject.InkEnabled = False
inkPictureObject.Ink = New Ink()
inkPictureObject.InkEnabled = True '<-- fails here
除了这个(发生 COMException: ErrorCode = -2147287036)和这个(仅在 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"
任何帮助将非常感激。