0

我想在构建机器上执行一些复制操作(而不是在开发机器上)

  • 执行构建之后,并且
  • 集成测试运行之前。

我怎么做?

也许,我应该将问题分解为子问题并举一些例子。

问题 1:我需要做什么才能使 MSBuild 脚本检测到它正在构建机器上执行并因此执行复制操作?我是否调整 *.csproj 文件?我是否在构建定义文件中做某事?构建服务器是我们 TFS 2010 后端的一部分。

问题 2:我需要使用什么变量来引用构建机器上的构建文件夹?绝对路径是

C:\Builds\1\ProjectX\Continous Integration\

我需要将一些受版本控制并最终在 Sources 文件夹中的文件复制到 Binaries 文件夹。

C:\Builds\1\ProjectX\Continous Integration\Binaries
C:\Builds\1\ProjectX\Continous Integration\Sources
C:\Builds\1\ProjectX\Continous Integration\TestResults
4

4 回答 4

1

无论您使用什么自动化构建,都应该能够将属性传递给 MSBuild。在命令行上,您执行以下操作:

msbuild my.proj /p:RunningOnBuildMachine=true

然后,在您的脚本中,您可以使用基于条件$(RunningOnBuildMachine) == 'true'来触发临时步骤。或者,已经有一个内置变量 $(BuildingInsideVisualStudio) 告诉 MSBuild 是否从 VS 中调用它,这可能足以满足您的需求。

至于你的输出目录在哪里,这有点棘手。是什么决定了那个位置?是 CI 服务器吗?如果是这样,您也可以尝试将输出目录作为属性传递给脚本。

于 2010-06-29T15:49:51.850 回答
0

如果您使用的是使用 Windows Workflow Foundation 而不是使用 MSBuild 的升级模板的默认构建过程模板 (DefaultTemplate.xaml),那么您可以使用开箱即用的 CopyDirectory 工作流活动并将其放在编译部分之间和工作流程的测试部分。

您在 TFS 2010 中使用的是哪个构建过程模板?

于 2010-06-29T21:58:47.167 回答
0

构建文件夹:

您是否尝试过 MSBuild 保留属性MSBuildProjectDirectory

您可以以与其他属性相同的方式访问它,例如$(MSBuildProjectDirectory)\Binaries. 还是你的意思是别的?

于 2010-07-12T09:05:44.517 回答
0

如果您对工作流程感到满意,您可以像 Ed 已经指定的那样操纵现有的工作流程来做到这一点。如果您希望它成为构建过程的一部分,以便您可以准备一个最终可以与 msdeploy 一起使用的包,您可以将其放入您的 msbuild 脚本中。

1) 假设你有一个 web 项目文件要构建,你可以创建与项目文件同名的 msbuild 脚本,扩展名为wpp.targets;它将被构建过程拾取,例如,如果您的项目称为 mywebproject.csprj,则新脚本将称为 mywebproject.wpp.targets。在那里你可以让你的目标在特定的构建目标之后运行。关于房产,您有很多选择。保罗的例子很好。我通常定义一个默认的空属性,我用构建参数覆盖它,或者修改工作流以覆盖该属性。在使用 Visual Studio 进行常规构建时,我的参数将为空,我可以将其用作某些目标的条件。

2)当我想在 msdeploy 包中包含其他文件时,我使用了很多$(ProjectDir)和 $(_PackageTempDir)。$(ProjectDir)也将为您工作。它指向构建服务器上的项目文件所在的文件夹。

我希望这会有所帮助。

于 2013-01-30T16:46:44.963 回答