2

我在 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"

任何帮助将非常感激。

4

1 回答 1

1

尝试从命令提示符运行 ccnet 并查看测试是失败还是通过。我认为你只需要执行ccservice.exe.

如果 ccnet 作为 Windows 服务运行,我可以理解为什么这可能会失败。Windows 服务不能*创建新窗口。

这个 Microsoft 文档http://msdn.microsoft.com/en-us/library/aa514604.aspx声明一个InkPicture是 ac# 包装器,它创建一个窗口来显示和与图片交互。

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创建窗口。尽管支持显然是分阶段的,但由 Microsoft 提供。

于 2012-11-21T20:39:36.060 回答