2

私の TFS (2008) ビルドの一部として、ASP.NET MVC プロジェクトのバイナリとビューをさまざまな場所に手動でコピーしたいと考えています。既存のすべてのバイナリとビューが正常にコピーされます。ただし、残念ながら、新しく追加されたビューは最初のビルド時に無視されます。その後、別のビルドを開始すると、それらが含まれます。

これは、私が TFSBuild.proj に加えた追加のスニペットです...

<ItemGroup>
  <BinaryFiles Include="$(BinariesRoot)\Debug\_PublishedWebsites\SiteName\bin\*.*" />
  <ViewFiles Include="$(BinariesRoot)\Debug\_PublishedWebsites\SiteName\Views\**\*.aspx" />
  <ViewFiles Include="$(BinariesRoot)\Debug\_PublishedWebsites\SiteName\Views\**\*.ascx" />
</ItemGroup>

<Target Name="AfterDropBuild">
  <Message Text="Starting deployment copy..." />
  <Copy SourceFiles="@(BinaryFiles)" DestinationFolder="T:\BuildWebSiteHosting\WebSite\bin\" ContinueOnError="false" />
  <Copy SourceFiles="@(ViewFiles)" DestinationFolder="T:\BuildWebSiteHosting\WebSite\Views\%(RecursiveDir)" ContinueOnError="false" />
  <Message Text="Deployment copy completed." />
</Target>

コピーするファイルのリストの作成が早すぎると思われます。「AfterDropBuild」を使用する必要がありますか、それともより良いターゲット名ですか?

4

1 に答える 1

4

私はこれを自分で解決することができました(質問をして自分の考えを整理するだけでとても役に立ちました!)。ファイルのリストが作成されるのが早すぎるという私の疑いは正しかった。Target 要素内に ItemGroup を配置することで、いつ評価されるかを指定できます。

修正されたスニペットは次のとおりです。

<Target Name="AfterDropBuild">
  <ItemGroup>
    <BinaryFiles Include="$(BinariesRoot)\Debug\_PublishedWebsites\SiteName\bin\*.*" />
    <ViewFiles Include="$(BinariesRoot)\Debug\_PublishedWebsites\SiteName\Views\**\*.aspx" />
    <ViewFiles Include="$(BinariesRoot)\Debug\_PublishedWebsites\SiteName\Views\**\*.ascx" />
  </ItemGroup>

  <Message Text="Starting deployment copy..." />
  <Copy SourceFiles="@(BinaryFiles)" DestinationFolder="T:\BuildWebSiteHosting\WebSite\bin\" ContinueOnError="false" />
  <Copy SourceFiles="@(ViewFiles)" DestinationFolder="T:\BuildWebSiteHosting\WebSite\Views\%(RecursiveDir)" ContinueOnError="false" />
  <Message Text="Deployment copy completed." />
</Target>
于 2009-11-12T00:08:02.517 に答える