gpt4 book ai didi

msbuild - MsBuild:通过CallTarget传递ItemGroup

转载 作者:行者123 更新时间:2023-12-04 13:20:50 27 4
gpt4 key购买 nike

我在MSBuild脚本中创建的项目组的范围设置方面遇到一些问题。基本上,我想要做的是有两个不同的目标-我们将它们称为RunUnitTestsRunIntegrationTests-生成一个名为TestAssemblies的项目组,然后调用RunTests,后者使用TestAssemblies来确定要从中运行测试的程序集。

单元测试和集成测试的两个不同目标都依赖于构建目标,并从那里获得包含所有已编译程序集的项目组,但是由于RunTests目标将在不同位置调用,因此它实际上不能依赖于它们中的任何一个。因此,我需要以某种方式将项目组传递给通用的testrunner目标。但是,这似乎是不可能的,因为对目标内的项目组所做的更改似乎仅限于在该目标内工作。

我看过these posts,但它们似乎仅能证实我的担心,并建议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>

有什么办法解决这个问题,还是我必须完全重组我的构建脚本?

最佳答案

对目标内某个项目组的更改仅在更改的目标退出后才对其他目标可见。因此,要坚持使用测试程序集列表,您可能必须将设置目标的实际位置移动到其自己的目标,如下所示:

<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>

关于msbuild - MsBuild:通过CallTarget传递ItemGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6730710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com