У меня возникли некоторые проблемы с областью видимости групп элементов, которые я создаю в скрипте MSBuild.По сути, я хочу иметь две разные цели - давайте назовем их RunUnitTests
и RunIntegrationTests
- которые генерируют группу элементов с именем TestAssemblies
, а затем вызывают RunTests
, которая использует TestAssemblies
, чтобы определить, какие сборкизапускать тесты из.
Две разные цели для модульных и интеграционных тестов зависят от цели сборки и получают оттуда группу элементов со всеми скомпилированными сборками, но поскольку цель RunTests
будет вызываться из разных мест, она может 'на самом деле зависит от любого из них.Таким образом, мне нужно как-то передать группу предметов в общую цель testrunner.Однако это кажется невозможным, потому что изменения в группе предметов в пределах цели, кажется, ограничены для работы только внутри этой цели.
Я видел эти записей , но они только подтверждают мои опасения и предлагают DependsOnTarget
в качестве обходного пути - который не будет работать для меня, так как мне нужно получать предметы из разных мест на разных трассах.
Этоэто то, что у меня есть:
<Target Name="RunAllTests" DependsOnTarget="BuildProject">
<!-- In here, items created in BuildProject are available. -->
<CallTarget Targets="RunUnitTests;RunIntegrationTests">
</Target>
<Target Name="RunUnitTests" DependsOnTarget="BuildProject">
<!-- In here, items created in BuildProject are available. -->
<!-- One of those is @(UnitTestAssemblies) -->
<CreateItem Include="@(UnitTestAssemblies)">
<Output TaskParameter="Include" ItemName="TestAssemblies" />
</CreateItem>
<CallTarget Targets="RunTests" />
</Target>
<!-- Then there's a similar target named RunIntegrationTests, which does the
same as RunUnitTests except it includes @(IntegrationTestAssemblies) -->
<Target Name="RunTests">
<!-- Here, I'd like to access @(TestAssemblies) and pass them to the NUnit
task, but they have fallen out of scope. -->
</Target>
Есть ли способ обойти это, или мне придется полностью реструктурировать мой скрипт сборки?