获取要复制到TFS Build Drop位置的静态内容

时间:2014-01-02 23:49:09

标签: visual-studio visual-studio-2012 tfs msbuild tfsbuild

我正在使用TFS 2013 / VS 2013。

由于各种原因,我需要将一些静态内容复制到TFS构建放置位置。我创建了一个自定义项目类型,只需将目录结构/文件复制到输出路径。

我希望TFS然后将输出路径中的所有内容都复制到放置位置,但事实并非如此。我的项目中没有文件显示在放置位置。

这是我的项目文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <OutputPath>db\</OutputPath>
  </PropertyGroup>
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <Target Name="Build">
    <Copy SourceFiles="@(Content)" DestinationFiles="@(Content->'$(OutputPath)%(RelativeDir)%(Filename)%(Extension)')" />
  </Target>
  <Target Name="Clean">
    <Exec Command="rd /s /q $(OutputPath)" Condition="Exists($(OutputPath))" />
  </Target>
  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
  <ItemGroup>
    <Content Include="**\*.*" Exclude="db\**\*.*;*.csproj;*.rgdbproj;*.vspscc" />
  </ItemGroup>
</Project>

当我在Visual Studio中构建它时,我得到所需的目录结构以显示在/ db文件夹中。

3 个答案:

答案 0 :(得分:1)

在TFS 2013中,您可以指定预构建和后构建脚本。您可以运行PowerShell脚本来复制文件。请参阅以下有关如何操作的问题。你必须使用TfvcTemplate.12.xaml。

Where can we open the `Post-build script` box of a build process template?

答案 1 :(得分:1)

我可以通过将所有引用从OutputPath更改为OutDir来解决此问题。显然,OutputPath已弃用,OutDir是TFS Build关注的内容。这是我的最终构建脚本:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <OutputPath>db\</OutputPath>
    <OutDir>db\</OutDir>
  </PropertyGroup>
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <Target Name="Build">
    <Copy SourceFiles="@(Content)" DestinationFiles="@(Content->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" />
  </Target>
  <Target Name="Clean">
    <Exec Command="rd /s /q $(OutDir)" Condition="Exists($(OutDir))" />
  </Target>
  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
  <ItemGroup>
    <Content Include="**\*.*" Exclude="db\**\*.*;*.csproj;*.rgdbproj;*.vspscc" />
  </ItemGroup>
</Project>

答案 2 :(得分:0)

在构建文件中,您可以定义复制文件的目标:

<Target Name="CopySomeFiles">

    <ItemGroup>
        <SomeFiles Include="$(SourceFolder)\*.*"></SomeFiles>
    </ItemGroup>

    <Copy SourceFiles="@(SomeFiles)" DestinationFolder="$(DestFolder)"  SkipUnchangedFiles="false"/>

</Target>

然后,您可以根据需要添加此目标,例如编译后:

<Target Name="AfterCompile"
        DependsOnTargets="CopySomeFiles">
</Target>