【发布时间】:2018-02-03 01:10:47
【问题描述】:
我是使用 TFS 构建的新手。我已经定义了一个作为持续集成运行的构建。它会创建一个放置文件夹,但其中没有任何内容。
在放置文件夹中移动内容的最佳做法是什么?我看到了一个 Binaries 文件夹,是否需要将内容复制到那里,或者我是否需要以某种方式更改 TFSbuild.proj 以将我想要的文件复制到放置文件夹?
【问题讨论】:
我是使用 TFS 构建的新手。我已经定义了一个作为持续集成运行的构建。它会创建一个放置文件夹,但其中没有任何内容。
在放置文件夹中移动内容的最佳做法是什么?我看到了一个 Binaries 文件夹,是否需要将内容复制到那里,或者我是否需要以某种方式更改 TFSbuild.proj 以将我想要的文件复制到放置文件夹?
【问题讨论】:
听起来您想将其他文件从工作区(或其他地方)复制到放置位置?
上面的目标为您提供了如何创建目标以复制文件的示例,但您可能想知道如何将其连接到您的 TFSBuild.proj。
执行此操作的一种简单方法是为此使用预定义的骨架目标之一,例如 AfterDropBuild。如果你有一个像上面提到的复制文件的目标,你可以把它放在 TFSBuild.proj 中:
<CreateItem Include="$(SolutionRoot)\Source\RandomFilesInWorkspaceFolder\**\*.*">
<Output TaskParameter="Include" ItemName="RandomFiles" />
</CreateItem>
<Copy SourceFiles="@(RandomFiles)" DestinationFiles="@(RandomFiles->'$(DropLocation)\RandomDestinationSubFolder\%(RecursiveDir)%(Filename)%(Extension)')" />
【讨论】:
我似乎通过在我的 TFSBuild.proj 末尾添加它来让它工作
<Target Name="PackageBinaries">
<ItemGroup>
<FilesToDrop Include="$(SolutionRoot)\MyProduct\Installer\Bin\**\*.msi"/>
</ItemGroup>
<Message Text="FilesToDrop=@(FilesToDrop)"/>
<Copy SourceFiles="@(FilesToDrop)"
DestinationFiles="@(FilesToDrop ->'$(BinariesRoot)\%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
它将所需的 msi 文件复制到 Binaries 文件夹中,然后正常的 tfs 构建系统将其复制到放置位置。我注意到每次构建开始时 Binaries 文件夹都会被删除,因此您不必担心清理工作。
PackageBinaries 目标似乎是执行此类操作时可以覆盖的标准目标名称。
更新较新版本的 TFS 可能有更好的方法!
【讨论】: