私はMSBuildスクリプトで作成した項目グループのスコープにいくつか問題があります。基本的には、2つの異なるターゲットを用意することです。TestAssemblies
というアイテムグループを生成し、RunTests
を呼び出すRunUnitTests
とRunIntegrationTests
とし、TestAssemblies
を使用してテストを実行するアセンブリを決定します。MsBuild:CallTargetを使用してItemGroupを渡す
ユニットテストと統合テストの2つの異なるターゲットはビルドターゲットに依存し、コンパイルされたすべてのアセンブリを含むアイテムグループをそこから取得しますが、RunTests
ターゲットは別の場所から呼び出されるため実際に依存することはできませんいずれかのしたがって、私はアイテムグループを何らかの形で共通のテストランナーのターゲットに渡す必要があります。しかし、これは不可能なようです。なぜなら、ターゲット内のアイテムグループの変更は、そのターゲット内でのみ機能するように範囲が設定されているようです。
私は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::だから固執するテストアセンブリのリストを取得するには、次のように独自のターゲットに目標を設定し、実際に移動する必要があり、私の簡易版で、私の更新を参照してください。現在のビルドスクリプト。 –