Для пакетирования вашего @(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".