Tom*_*han 6 msbuild scope itemgroup
我在我在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>
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,还是我必须彻底重构我的构建脚本?
Tho*_*fer 14
只有在更改目标退出后,对目标中项目组的更改才会对其他目标可见.因此,要使测试程序集的列表保持不变,您可能必须将目标实际设置为其自己的目标,如下所示:
<Target Name="PrepareUnitTestList" DependsOnTarget="BuildProject">
<ItemGroup>
<TestAssemblies Include="@(UnitTestAssemblies)"/>
</ItemGroup>
</Target>
<Target Name="RunUnitTests" DependsOnTargets="PrepareUnitTestList">
<CallTarget Targets="RunTests"/>
</Target>
<Target Name="RunTests">
<Message Text="Test: %(TestAssemblies.Identity)"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5499 次 |
| 最近记录: |