Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅在生成计算机上执行MSBuild复制操作?_Msbuild_Build Automation_Msbuild 4.0 - Fatal编程技术网

如何仅在生成计算机上执行MSBuild复制操作?

如何仅在生成计算机上执行MSBuild复制操作?,msbuild,build-automation,msbuild-4.0,Msbuild,Build Automation,Msbuild 4.0,我想在生成机器上执行一些复制操作(但不是在开发人员机器上) 在执行构建之后 在集成测试运行之前 我该怎么做 或许,我应该把问题分成几个小问题,并举例说明 问题1:我需要做什么才能使MSBuild脚本检测到它正在生成计算机上执行,从而执行复制操作?我是否调整*.csproj文件?是否在生成定义文件中执行某些操作?构建服务器是我们TFS 2010后端的一部分 问题2:我需要使用什么变量来引用生成计算机上的生成文件夹?绝对路径是 C:\Builds\1\ProjectX\Continous Int

我想在生成机器上执行一些复制操作(但不是在开发人员机器上)

  • 在执行构建之后
  • 在集成测试运行之前
我该怎么做

或许,我应该把问题分成几个小问题,并举例说明

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

问题2:我需要使用什么变量来引用生成计算机上的生成文件夹?绝对路径是

C:\Builds\1\ProjectX\Continous Integration\
我需要将一些受版本控制的文件复制到“源”文件夹中的“二进制文件”文件夹中

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

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

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


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

如果您使用的是默认生成过程模板(DefaultTemplate.xaml)这是使用Windows工作流基础而不是使用MSBug的升级模板,然后可以使用包含在框外的CopyCube工作流活动,并将其放入工作流的编译部分和测试部分之间。 您在TFS 2010中使用哪个生成过程模板?

生成文件夹:

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


您可以使用与其他属性相同的方式访问它,例如
$(MSBuildProjectDirectory)\Binary
。或者你的意思是其他的吗?

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

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

2) 当我想在msdeploy包中包含其他文件时,我使用了很多$(ProjectDir)和$(\u PackageTempDir)$(ProjectDir)也适用于您。它指向生成服务器上项目文件所在的文件夹


我希望这有帮助。

我不确定输出目录位置决定了什么。我们有一个TFS2010实例和一个构建服务器。我假设输出位置是在团队资源管理器视图>项目X>构建>持续集成>编辑构建定义>工作区>构建代理文件夹=$(SourceDir)。。。我想我可以使用MSBuild脚本中的$(SourceDir)。非常好的提示,谢谢!是的,我们正在使用默认的生成过程模板DefaultTemplate.xaml。我会尝试在正确的地方添加一个CopyDead工作流Acdiaby.太棒了,我现在是团队构建2010中Windows工作流基础的忠实粉丝。