代码之家  ›  专栏  ›  技术社区  ›  Lernkurve

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

  •  0
  • Lernkurve  · 技术社区  · 14 年前

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

    • 之后 执行生成并
    • 之前 集成测试运行。

    我该怎么做?

    也许,我应该把这个问题分成子问题,并给出一些例子。

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

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

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

    我需要将一些受版本控制的文件复制到binaries文件夹中,并最终保存在sources文件夹中。

    C:\Builds\1\ProjectX\Continous Integration\Binaries
    C:\Builds\1\ProjectX\Continous Integration\Sources
    C:\Builds\1\ProjectX\Continous Integration\TestResults
    
    4 回复  |  直到 12 年前
        1
  •  1
  •   Paolo    14 年前

    无论使用什么自动生成,都应该能够将属性传递给msbuild。在命令行上,您执行如下操作:

    msbuild my.proj /p:RunningOnBuildMachine=true
    

    在脚本中,可以使用基于 $(RunningOnBuildMachine) == 'true' 触发临时步骤。或者,已经有一个内置变量$(buildingInSideDesignStudio),它告诉msbuild它是否是从vs内部调用的,这可能足以满足您的需要。

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

        2
  •  0
  •   Ed Blankenship Simon W    14 年前

    如果您使用的是使用Windows工作流基础的默认构建过程模板(Debug模板),而不是使用MSBug的升级模板,那么您可以使用包含在框外的CopyCube工作流活动,并将其放到工作流的编译部分和测试部分之间。

    您在TFS 2010中使用哪个生成过程模板?

        3
  •  0
  •   zbynour    14 年前

    建立文件夹:

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

    您可以使用与其他属性相同的方式访问它,例如 $(MSBuildProjectDirectory)\Binaries . 或者你是说别的什么?

        4
  •  0
  •   Biser C.    12 年前

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

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

    2)我用了很多 $(项目DIR) 以及$(_packagetempdir),当我想在msdeploy包中包含其他文件时。 $(项目DIR) 也会为你工作。它指向生成服务器上项目文件所在的文件夹。

    希望有帮助。