0

私は次のターゲットを持っています:

<Target Name="SetBinariesLocationForTeamBuild">
    <!--We add the following location paths because TFS Team Build first copies to \sources and \binaries folders
    rather than simply having the binaries in a \bin folder of the source folder
    at this point the build will be at: C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment
    so we need to go up 4 levels before going back down to binaries-->
    <Message Text="Value of TeamBuild=$(TeamBuild)"/>

    <Message Text="MSBuildProjectName: $(MSBuildProjectName)"/>
    <Message Text="MSBuildStartupDirectory: $(MSBuildStartupDirectory)"/>
    <Message Text="MSBuildProjectDirectory: $(MSBuildProjectDirectory)"/>
    <Message Text="MSBuildProjectFullPath: $(MSBuildProjectFullPath)"/>
    <Message Text="MSBuildThisFileDirectory: $(MSBuildThisFileDirectory)"/>

    <ItemGroup>
      <Schemas Condition ="'$(TeamBuild)' == 'True'" Include="x.Int.MIS.Schemas.dll">
        <LocationPath>..\..\..\..\..\..\..\..\binaries\</LocationPath>
      </Schemas>
    </ItemGroup>

    <ItemGroup>
      <Pipelines Condition ="'$(TeamBuild)' == 'True'" Include="x.Int.Pipelines.dll">
        <LocationPath>..\..\..\..\..\..\..\..\binaries\</LocationPath>
      </Pipelines>
    </ItemGroup>

    <ItemGroup>
      <PipelineComponents Condition ="'$(TeamBuild)' == 'True'" Include="x.Int.PipelineComponents.dll">
        <LocationPath>..\..\..\..\..\..\..\..\binaries\</LocationPath>
      </PipelineComponents>
    </ItemGroup>

    <ItemGroup>
      <Orchestrations Condition ="'$(TeamBuild)' == 'True'" Include="x.Int.Orchestrations.dll">
        <LocationPath>..\..\..\..\..\..\..\..\binaries\</LocationPath>
      </Orchestrations>
    </ItemGroup>

    <ItemGroup>
      <Transforms Condition ="'$(TeamBuild)' == 'True'" Include="x.Int.Transforms.dll">
        <LocationPath>..\..\..\..\..\..\..\..\binaries\</LocationPath>
      </Transforms>
    </ItemGroup>

    <Message Text="What is Schemas location path: %(Schemas.LocationPath)"/>
    <Message Text="What is Pipelines location path: %(Pipelines.LocationPath)"/>

  </Target>

/ p:TeamBuild = True / t:SetBinariesForTeamBuildを渡してコマンドラインからプロジェクトを実行します。出力は私を非常に困惑させました...

Microsoft(R)ビルドエンジンバージョン4.0.30319.1 [Microsoft .NET Framework、バージョン4.0.30319.269] Copyright(C)Microsoft Corporation 2007.無断複写・転載を禁じます。

Build started 24/07/2012 16:59:08.
Project "C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment\x.Int.MIS.Deployment.btdfproj" on node 1 (SetBinariesLocationForTeamBuild target(s)).
SetBinariesLocationForTeamBuild:
  Value of TeamBuild=True
  MSBuildProjectName: x.Int.MIS.Deployment
  MSBuildStartupDirectory: C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment
  MSBuildProjectDirectory: C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment
  MSBuildProjectFullPath: C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment\x.Int.MIS.Deployment.btdfproj
  MSBuildThisFileDirectory: C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment\
  What is Schemas location path: ..\x.Int.MIS.Schemas\bin\Debug
  What is Schemas location path: ..\..\..\..\..\..\..\..\binaries\
  What is Pipelines location path: ..\x.Int.MIS.Pipelines\bin\Debug
  What is Pipelines location path: ..\..\..\..\..\..\..\..\binaries\
Done Building Project "C:\Builds\3\x.Int.MIS\SupportBTDF\Sources\x.Int.MIS\Dev\V1.0\Src\Solutions\MIS\x.Int.MIS.Deployment\x.Int.MIS.Deployment.btdfproj" (SetBinariesLocationForTeamBuild target(s)).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.17

ロケーションパスを8..\のパスにしたいのですが、そうではありません-なぜ、なぜ2回印刷されるのかわかりません!?

4

1 に答える 1

1

@(Schemas) および @(Pipelines) 項目配列は、それぞれ別の項目​​タプルが追加されているか、そうでなければ出力できませんでした。これが発生する別のターゲットが実行されている必要があります。正確なコマンド ラインを使用してプロジェクトで msbuild を実行している場合、追加のターゲットは、プロジェクトの InitialTargets のエントリであるか、またはこのターゲットへの BeforeTargets または AfterTargets 参照を使用して上記のターゲットに接続されたターゲットである必要があります。 .

于 2012-07-25T05:17:05.533 に答える