NAnt スクリプトから PartCover を呼び出すときに、最終的に PartCover を機能させるには、いくつかの手順を実行する必要がありました。他の人の便宜のためにここでしなければならないことをすべて集めました。これのいくつかは他の人によってすでに回答されていることに注意してください.
まず、ここの他の場所で回答されているように、OS が 64 ビットの場合、[最新の Windows SDK]\bin\CorFlags.exe [PartCover インストール ディレクトリ]\PartCover.exe /32BIT+ /Force を実行する必要があります。
これは、PartCover のインストール後に 1 回だけ行うステップです。実行可能ファイルが変更され、アセンブリに再署名する必要があることが警告されますが、私はそれを行わず、(最終的には) 正常に機能しました。CorFlags はあなたが要求したことを実行せず、署名について警告したように見えますが、.exe を変更しただけで、それを明示的に指摘していないことに注意してください。
次に、OS が 64 ビットで、PartCover で NUnit (または別のテスト exe) を使用する場合は、x86 用に明示的にコンパイルされたバージョンを呼び出す必要があります。NUnit の場合、それは nunit-console-x86.exe になります。nunit-console.exe を呼び出すと、作業を行った後に無期限にハングし、プロンプトに戻りません。
次に、ここの他の場所でも回答されているように、開発ビルドである PartCover 2.3 は、CorFlags を実行した後でもサイレントに失敗していました。ただし、2.2は機能しました。
次に、PartCover.exe が呼び出されると、引数の構文は -- arg-name ... and NOT --=arg-name (つまり、ダッシュ ダッシュ スペース引数名であり、ダッシュ ダッシュは引数名と同じではありません); PartCover のドキュメントは両方に対応しているように見えますが、等号はうまくいきませんでした。
以上でようやくコマンドラインからPartCoverが動くようになりました。設定ファイル (PartCover ブラウザー UI アプリを使用して設定ファイルを保存し、コマンド ラインから使用できます) を使用したので、指定した唯一の引数は設定ファイルのフル パスと出力レポート ファイルです。名前のフルパス。
これは NAnt スクリプトから呼び出されたときはまだ機能していなかったので、arg 値を引用符で囲む必要があり、HTML エンコードされたトークンを引用符に使用する必要があることに最終的に気付きました。したがって...
NAnt の抜粋:
<property name="PartCoverExePath" value="c:\Program Files (x86)\PartCover .NET 2\PartCover.exe" />
<property name="PartCoverWorkPath" value="c:\Projects\MyProject\trunk\CI\" />
<property name="PartCoverSettingsFileName" value="PartCover.Settings.xml" />
<property name="PartCoverReportFileName" value="PartCover.Report.xml" />
<target name="MyTarget">
<exec program="${PartCoverExePath}">
<arg value="--settings "${PartCoverWorkPath}${PartCoverSettingsFileName}"" />
<arg value="--output "${PartCoverWorkPath}${PartCoverReportFileName}"" />
</exec>
</target>
そして、PartCover 設定ファイル:
<PartCoverSettings>
<Target>C:\CI\Binaries\NUnit2.5.2\bin\net-2.0\nunit-console-x86.exe</Target>
<TargetWorkDir>c:\Projects\MyProject\trunk\MyProject.Test\bin\Debug</TargetWorkDir>
<TargetArgs>MyProject.Test.dll</TargetArgs>
<Rule>+[*]*</Rule>
<Rule>-[log4net*]*</Rule>
<Rule>-[nunit*]*</Rule>
<Rule>-[MyProject.Test*]*</Rule>
</PartCoverSettings>
ふぅ!うまくいけば、これが私が抱えていた頭痛を他の誰かに救うでしょう.