我尝试使用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中,它会在stdout死亡时将其清理消息打印出来。
如果OpenCover停止后OpenCover尝试获取指标的应用程序关闭,OpenCover是否仍能获得覆盖率信息?
答案 0 :(得分:0)
OpenCover始终从目标进程收集信息,但是在目标进程停止之前它不会导出信息,如果信息异常停止,它也不会将信息导出到文件。
-register
选项无效,请参阅usage guide。
如果在控制台模式下停止服务,为什么不尝试一种不太干扰的方式 - 我通常只是等待输入键。
如果CTRL + C是顶级货架强加的并且无法更改的内容,请将您的应用程序包装在您自己的服务中。它并不难(有些巫师可以帮助你)并且会给你更多的控制权。
有很多文章介绍如何让它在控制台和服务模式下运行。
OpenCover有时可以再次使用服务我将您推荐给wiki和-service
开关,但这对于开始工作来说可能很棘手。