我在使用MSBuild腳本創建的項目組範圍方面存在一些問題。基本上,我想要做的是有兩個不同的目標 - 我們稱之爲RunUnitTests
和RunIntegrationTests
- 生成一個名爲TestAssemblies
的項目組,然後調用RunTests
,它使用TestAssemblies
來確定從哪個組件運行測試。MsBuild:使用CallTarget傳遞ItemGroup
單元測試和集成測試的兩個不同目標都取決於構建目標,並從中獲取具有所有編譯程序集的項目組,但由於RunTests
目標將從不同位置調用,因此它不能真正依賴於的任何一方。因此,我需要以某種方式將物品組傳遞給普通的testrunner目標。但是,這似乎是不可能的,因爲對目標中項目組的更改似乎只能在該目標內工作。
我見過theseposts,但他們只似乎證實了我的恐懼,並建議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>
有沒有解決這個辦法,或將我徹底調整自己的構建腳本?
@ThomasGerstendörfer:請看看我更新的簡化版本我當前構建腳本。 –