Способ работы ItemGroups в MSBuild состоит в том, что они оцениваются в самом начале сценариев MSBuild, прежде чем будут выполнены какие-либо цели. Поэтому, если сборки еще не существуют (чего не будет, потому что они еще не были собраны), то ItemGroups не найдет никаких файлов.
Обычный шаблон в MSBuild, позволяющий обойти это, - это повторно вызвать MSBuild в этот момент, чтобы при оценке групп элементов во внутреннем выполнении MSBuild сборки существовали.
Например, что-то вроде:
<PropertyGroup>
<TestDependsOn>
$(TestDependsOn);
CallMbUnitTests;
</TestDependsOn>
</PropertyGroup>
<Target Name="CallMbUnitTests">
<MSBuild Projects="$(MSBuildProjectFile)"
Properties="BuildAgentName=$(BuildAgentName);BuildAgentUri=$(BuildAgentUri);BuildDefinitionName=$(BuildDefinitionName);BuildDefinitionUri=$(BuildDefinitionUri);
BuildDirectory=$(BuildDirectory);BuildNumber=$(BuildNumber);CompilationStatus=$(CompilationStatus);CompilationSuccess=$(CompilationSuccess);
ConfigurationFolderUri=$(ConfigurationFolderUri);DropLocation=$(DropLocation);
FullLabelName=$(FullLabelName);LastChangedBy=$(LastChangedBy);LastChangedOn=$(LastChangedOn);LogLocation=$(LogLocation);
MachineName=$(MachineName);MaxProcesses=$(MaxProcesses);Port=$(Port);Quality=$(Quality);Reason=$(Reason);RequestedBy=$(RequestedBy);RequestedFor=$(RequestedFor);
SourceGetVersion=$(SourceGetVersion);StartTime=$(StartTime);Status=$(Status);TeamProject=$(TeamProject);TestStatus=$(TestStatus);
TestSuccess=$(TestSuccess);WorkspaceName=$(WorkspaceName);WorkspaceOwner=$(WorkspaceOwner);
SolutionRoot=$(SolutionRoot);BinariesRoot=$(BinariesRoot);TestResultsRoot=$(TestResultsRoot)"
Targets="RunMbUnitTests"/>
</Target>
<ItemGroup>
<TestAssemblies Include="$(OutDir)\Project1.dll" />
<TestAssemblies Include="$(OutDir)\Project2.dll" />
</ItemGroup>
<Target Name="RunMbUnitTests">
<MbUnit
Assemblies="@(TestAssemblies)"
ReportTypes="html"
ReportFileNameFormat="buildreport{0}{1}"
ReportOutputDirectory="." />
</Target>
Надеюсь, это поможет, удачи.
Martin.