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 でサービス プロセスがまだ進行中であることを確認できます。終了すると、クリーンアップ メッセージが stdout に出力されます。

OpenCover がメトリックを取得しようとしているアプリケーションが、OpenCover の停止後にシャットダウンした場合、OpenCover は引き続きカバレッジ情報を取得できますか?

4

1 に答える 1

0

OpenCover は常にターゲット プロセスから情報を収集しますが、ターゲット プロセスが停止するまで情報をエクスポートしません。また、異常停止した場合は情報をファイルにエクスポートしません。

あなたの-registerオプションは無効です使用ガイドを参照してください。

コンソール モードでサービスを停止する場合は、邪魔にならない方法を試してみませんか。通常は、Enter キーを待つだけです。

CTRL+C がトップ シェルフが課すものであり、変更できない場合は、アプリを独自のサービスにラップします。それほど難しいことではなく (支援するウィザードが用意されています)、はるかに詳細に制御できます。

コンソール モードとサービス モードの両方で実行する方法を示す記事はたくさんあります。

OpenCover は時々サービスで動作することがあります。Wiki と-serviceスイッチを参照してください。

于 2014-08-07T19:22:00.080 に答える