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