0

我正在尝试使用 OpenCover 来获取使用 Topshelf 的服务的覆盖率指标。该应用程序从控制台运行良好。

当应用程序运行时,它会打印以下内容:

The service is now running, press Control+C to exit.

然后一旦按下 Control+C 就会打印

Control+C detected, attempting to stop service.

在没有 OpenCover 的情况下完成时,应用程序会捕获 Ctrl+C 并正常停止,完成后返回命令提示符。

我正在使用以下命令通过 OpenCover 运行应用程序:

OpenCover.Console.exe -target:service.exe -log:All -register:administrator

当通过 OpenCover 完成时,我认为 OpenCover 会立即捕获 Ctrl+C,然后将其传递给我的服务应用程序。结果是 OpenCover 立即终止,但覆盖的目标应用程序仍在运行,并且需要几秒钟才能停止。我可以看到服务进程仍在 Process Explorer 中运行,并且在它死亡时将其清理消息打印到标准输出。

如果 OpenCover 尝试从中获取指标的应用程序在 OpenCover 停止后关闭,OpenCover 是否仍能获取覆盖信息?

4

1 回答 1

0

OpenCover 一直从目标进程收集信息,但是在目标进程停止之前它不会导出信息,如果它异常停止,它也不会将信息导出到文件中。

您的-register选项无效,请参阅使用指南

如果在控制台模式下停止服务,为什么不尝试一种不那么侵入性的方式 - 我通常只是等待输入键。

如果 CTRL+C 是顶层强加且无法更改的,那么将您的应用程序包装在您自己的服务中。这并不难(有向导可以帮助您)并且会给您更多的控制权。

有很多文章展示了如何让它在控制台和服务模式下运行。

OpenCover 有时可以再次与服务一起工作,我建议您参考 wiki 和-serviceswitch,但这可能很难开始工作。

于 2014-08-07T19:22:00.080 回答