作为 TFS (2008) 构建的一部分,我想手动将 ASP.NET MVC 项目的二进制文件和 View 复制到多个不同的位置。所有现有的二进制文件和 View 均已成功复制。然而不幸的是,任何新添加的 View 在第一次构建期间都会被忽略。如果我随后开始另一个构建,它们就会被包含在内。
这是我对 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”还是它们是更好的目标名称?
最佳答案
我自己设法解决了这个问题(仅仅提出问题并组织我自己的想法就非常有帮助!)。我对文件列表构建得太快的怀疑是正确的。通过将 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>
关于tfs - TFSBuild.proj 中复制目标的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1718382/