【问题标题】:Get static content to copy to TFS Build Drop location获取要复制到 TFS Build Drop 位置的静态内容
【发布时间】:2014-01-20 13:25:43
【问题描述】:

我正在使用 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 文件夹中。

【问题讨论】:

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


    【解决方案1】:

    在 TFS 2013 中,您可以指定预构建和构建后脚本。您可以运行 PowerShell 脚本来复制文件。请参阅下面的问题,了解如何做到这一点。为此,您必须使用 TfvcTemplate.12.xaml。

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

    【讨论】:

      【解决方案2】:

      我能够通过将所有引用从 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>
      

      【讨论】:

        【解决方案3】:

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

        <Target Name="CopySomeFiles">
        
            <ItemGroup>
                <SomeFiles Include="$(SourceFolder)\*.*"></SomeFiles>
            </ItemGroup>
        
            <Copy SourceFiles="@(SomeFiles)" DestinationFolder="$(DestFolder)"  SkipUnchangedFiles="false"/>
        
        </Target>
        

        然后您可以将此目标添加到您想要的位置,例如编译后:

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

        【讨论】:

        • 这和我现在做的有什么不同?
        猜你喜欢
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 2021-03-25
        相关资源
        最近更新 更多