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