Problemas com o alvo de cópias em tfsbuild.proj
Pergunta
Como parte do meu TFS (2008) Build, quero copiar manualmente os binários e as visualizações de um projeto ASP.NET MVC para vários locais diferentes. Todos os binários e visões existentes são copiados com sucesso. Infelizmente, no entanto, todas as visualizações recém -adicionadas são ignoradas durante sua primeira construção. Se eu começar outra compilação, eles serão incluídos.
Aqui está um trecho das adições que fiz ao 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>
Suspeito que a lista de arquivos para copiar esteja sendo construída muito cedo. Devo estar usando "AfterDropBuild" ou é um nome de destino melhor?
Solução
Consegui resolver este eu mesmo (foi muito útil apenas fazer a pergunta e organizar meus próprios pensamentos!). Minhas suspeitas de que as listas de arquivos estavam sendo construídas muito logo estavam corretas. Colocando o grupo Item dentro do elemento de destino, você pode especificar quando ele é avaliado.
O trecho corrigido é:
<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>