TFSBuild.proj中复制目标的问题

时间:2009-11-11 22:04:19

标签: tfs msbuild tfs2008 tfsbuild

作为我的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”还是他们更好的目标名称?

1 个答案:

答案 0 :(得分:4)

我自己设法解决了这个问题(只是提出问题并组织我自己的想法非常有帮助!)。我怀疑文件列表过早构建是正确的。通过将ItemGroup放在Target元素中,您可以指定何时进行求值。

更正的代码段是:

<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>