バッチ処理の場合@(UnitTestProjects)
、ターゲットは次のように使用する必要があります。
<Target Name="Coverage">
<NCover TestRunnerExe="C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit-console.exe"
TestRunnerArgs=""%(UnitTestProjects.Identity)" "%(UnitTestProjects.Identity)""
<!--
If you receive the Task Output (*Test.dll) you will have to extract
the working dir path
-->
WorkingDirectory="C:\SomeProject\bin\"
AppendTrendTo="coverage.trend"
OnlyAssembliesWithSource="True"
<!--
... the same thing applies to finding out the current project name
from your Task Ouput.
-->
ProjectName="SomeProjectCoverage" />
</Target>
より信頼性の高い解決策は、(テスト) プロジェクトに関するメタデータを保持する TaskItems のリストを提供することです。
<ItemGroup>
<TestProject Include="MyProject1.Test.dll">
<TestProjectName>MyProject1</TestProjectName>
<MyTestProjectWorkingDir>C:\MyProject1\bin</MyTestProjectWorkingDir>
</TestProject>
<TestProject Include="MyProject2.Test.dll">
<TestProjectName>MyProject2</TestProjectName>
<MyTestProjectWorkingDir>C:\MyProject2\bin</MyTestProjectWorkingDir>
</TestProject>
</ItemGroup>
<Target Name="Coverage">
<NCover TestRunnerExe="C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit-console.exe"
TestRunnerArgs=""%(TestProject.Identity)" "%(TestProject.Identity)""
WorkingDirectory="%(TestProject.MyTestProjectWorkingDir)"
AppendTrendTo="coverage.trend"
OnlyAssembliesWithSource="True"
ProjectName="%(TestProject.MyTestProjectName)" />
</Target>
あなたの質問は、TaskItems の構成リストを維持することなく、新しいテスト プロジェクトを追加できる自動化されたアプローチを探していることを示唆しています。
NCover タスクにフィードするために必要なすべての情報を抽出するのは非常に難しいため、半自動化されたアプローチが有効な場合があります。
グローバル テスト プロジェクトの ItemGroup にフィードするインポートをテスト プロジェクトに追加できます。
<ItemGroup>
<!-- add existing ItemGroup -->
<TestProject Include="@(TestProject)" />
<!-- add project itself -->
<TestProject Include="MyProject1.Test.dll">
<TestProjectName>MyProject1</TestProjectName>
<MyTestProjectWorkingDir>C:\MyProject1\bin</MyTestProjectWorkingDir>
</TestProject>
</ItemGroup>
NCover タスクでの使用法は上記と同じです。
この方法では、マスター ビルド スクリプトは特定のテスト プロジェクトについて知る必要がありません。ItemGroup "TestProject" を処理するだけです。