Мне пришлось пройти через несколько шагов, чтобы наконец заставить PartCover работать при вызове его из сценария NAnt. Я собрал все, что я должен был сделать здесь для удобства других; обратите внимание, что на некоторые из них уже отвечали другие, но я потратил кучу времени, чтобы собрать все это вместе.
Во-первых, как ответили в другом месте здесь, если ваша ОС является 64-битной, вам нужно запустить [самый последний Windows SDK] \ bin \ CorFlags.exe [PartCover install dir] \ PartCover.exe / 32BIT + / Force
Это однократный шаг после установки PartCover. Это изменит исполняемый файл и предупредит вас, что сборку нужно будет подписать заново, но я этого не сделал, и она (в конце концов) работала нормально. Обратите внимание, что, хотя похоже, что CorFlags не выполнил то, о чем вы просили, и предупредил вас о подписи, он изменил .exe, но явно не указывает на это.
Далее, опять же, если ваша ОС 64-битная и вы используете NUnit (или другой тестовый exe) с PartCover, вам нужно будет вызвать версию, явно скомпилированную для x86. В случае с NUnit это будет nunit-console-x86.exe. Вызов nunit-console.exe просто зависнет для меня после выполнения работы и не вернется к приглашению.
Далее, как уже было сказано в другом месте, PartCover 2.3, сборка dev, молча терпела неудачу даже после запуска на нем CorFlags. Однако 2.2 сработало.
Далее, когда вызывается PartCover.exe, синтаксис для аргументов
- arg-name ... и NOT - = arg-name (то есть тире тире пробел имя арг, а не тире равно арг имя); документы PartCover, кажется, идут обоими путями, но знак равенства просто не работал для меня.
После вышесказанного PartCover наконец-то работал из командной строки. Я использовал файл настроек (вы можете использовать приложение UI браузера PartCover для сохранения файла настроек, который затем можно использовать из командной строки), чтобы единственными указанными мной аргументами были полный путь к файлу настроек и файл выходного отчета имя полный путь.
Это все еще не работало, когда вызывалось из сценария NAnt, поэтому я наконец понял, что значения arg нужно заключать в кавычки ... и использовать закодированные токены HTML для кавычек. Таким образом ...
Отрывок отрывка:
<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>
Уф! Надеюсь, это спасет кого-то еще от головной боли, которая у меня была.