2

ItemGroup があり、そのメタデータを MSBuild プロジェクトで識別子として使用してバッチ処理を行います。例えば:

        <BuildStep
          TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
          BuildUri="$(BuildUri)"
          Name="RunUnitTestsStep-%(TestSuite.Filename)-%(TestSuite.Extension)"
          Message=" - Unit Tests: %(TestSuite.Filename): %(TestSuite.Extension)">

          <Output
            TaskParameter="Id"
            PropertyName="RunUnitTestsStepId-%(TestSuite.Filename)-%(TestSuite.Extension)" />
        </BuildStep>

ただし、これは機能しません。拡張機能にドットが含まれているためです。これは Id (BuildStep タスク内) には無効な文字です。したがって、MSBuild は BuildStep タスクで常に失敗します。

ドットを削除しようとしましたが、運がありません。既存の ItemGroup にメタデータを追加する方法はあるのでしょうか? 理想的には、%(TestSuite.ExtensionWithoutDot) のようなものが欲しいです。どうすればそれを達成できますか?

4

1 に答える 1

3

ここで要素が何をしているのか少し混乱していると思います.PropertyName<Output>属性の値で名前が付けられたプロパティを作成し、そのプロパティのをBuildStepタスクからのId出力の値に設定します. Id の値に影響を与えることはありません。ビルド ステップのステータスを設定するために、後で参照できるようにプロパティに保存するだけです。

それを念頭に置いて、作成されたプロパティに拡張子の連結を含む名前が付けられることを懸念する理由がわかりません。プロパティ名が一意である限り、後続の BuildStep タスクで後で参照できます。また、一意性を示すにはテストスイートのファイル名で十分だと思います。

実際、ターゲットのバッチ処理を行った場合、各テストスイート/ビルドステップのペアを追跡する一意のプロパティを作成する必要がなくなります。

<Target Name="Build"
        Inputs="@(TestSuite)"
        Outputs="%(Identity).Dummy">
    <!--
    Note that even though it looks like we have the entire TestSuite itemgroup here,
    We will only have ONE - ie we will execute this target *foreach* item in the group
    See http://beaucrawford.net/post/MSBuild-Batching.aspx
    -->


    <BuildStep
          TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
          BuildUri="$(BuildUri)"
          Name="RunUnitTestsStep-%(TestSuite.Filename)-%(TestSuite.Extension)"
          Message=" - Unit Tests: %(TestSuite.Filename): %(TestSuite.Extension)">

          <Output
            TaskParameter="Id"
            PropertyName="TestStepId" />
        </BuildStep>

    <!--
    ..Do some stuff here..
    -->

    <BuildStep Condition=" Evaluate Success Condition Here "
           TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
           BuildUri="$(BuildUri)"
           Id="$(TestStepId)"
           Status="Succeeded" />
    <BuildStep Condition=" Evaluate Failed Condition Here "
           TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
           BuildUri="$(BuildUri)"
           Id="$(TestStepId)"
           Status="Failed" />
</Target>
于 2010-08-12T09:20:01.057 に答える