MSBuild スクリプトで作成した項目グループのスコープに問題があります。基本的に、私がやりたいことは、2 つの異なるターゲットを用意することです - それらRunUnitTests
を呼び出しましょうRunIntegrationTests
- と呼ばれるアイテム グループを生成し、TestAssemblies
次に を呼び出しますRunTests
。これにより、TestAssemblies
どのアセンブリからテストを実行するかが決定されます。
単体テストと統合テストの 2 つの異なるターゲットはどちらもビルド ターゲットに依存し、そこからすべてのコンパイル済みアセンブリを含む項目グループを取得しますが、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>
これを回避する方法はありますか、それともビルド スクリプトを完全に再構築する必要がありますか?