在CC.Net中指定Tf.exe和MsBuild版本

时间:2011-08-18 01:07:41

标签: tfs msbuild cruisecontrol.net

问题

我正在将构建移植到更新版本的CC.Net(从1.4.4到1.6的最新版本)。以前,使用<msbuild />标记构建混合<exec />标记,并使用tf.exe命令调用批处理文件。

构建必须依赖于msbuildtf.exe命令之间相同的源代码控制版本,因为现在我在tf.exe命令上收到错误:

  

无法确定工作区。

当我启动命令提示符时,将runas作为服务使用的同一用户,并使用相同的命令调用所使用的批处理文件(来自同一目录),我得到同样的错误。

但是,如果我使用runas启动 Visual Studio 2010 命令提示符,并调用该命令(来自同一目录),我就不会收到错误。

这也是有道理的,因为%UserProfile%\Local Settings\Application Data\Microsoft\Team Foundation\3.0\Cache\VersionControl.config文件具有工作空间映射,但...\1.0\Cache\VersionControl.config文件没有。

我想尝试的解决方案

我不能简单地更改批处理文件的PATH,因为由于许可,它实际上需要针对旧版本的Visual Studio进行构建。

我想我可以通过指定与<msbuild />标记一起使用的TFS / msbuild版本来解决这个问题。但我不知道该如何解决这个问题。我认为这将是某种服务器配置,但我在文档中没有找到任何相关内容。

我的问题是:如何指定Cruise Control用于<msbuild />标签的TFS版本?或者还有另一种解决方法吗?

2 个答案:

答案 0 :(得分:1)

据我所知,没有办法直接用msbuild指定。它在我们的地方解决的方法是我们将msbuild的可执行文件设置为bat文件,该文件基本上是所需vcvars脚本的副本(由Visual Studio命令提示符用于设置环境)。 / p>

<tasks>
      <msbuild>
        <executable>vcvars_VC10_amd64.bat</executable>
        <workingDirectory>SomeFolder</workingDirectory>
        <environment>
            <variable name="foo" value="bar" />
        </environment>
        <projectFile>msbuild.proj</projectFile>
        <buildArgs>/m:2  /p:Configuration=Release /p:Platform=x64 /v:normal</buildArgs>
        <targets>Clean;Build;Test</targets>
        <timeout>3600</timeout>
      </msbuild>
  </tasks>

也许您可以使用<environment>属性来设置所需的路径。

答案 1 :(得分:0)

我不会接受这个解决方案,万一人们有其他解决方案(或者可以解决我直接询问的问题),但这就是我最终解决问题的方法:

我在构建任务的顶部添加了工作区同步任务:

<tasks>
    <exec>
        <description>Sync the workspaces with the TFS server, for the version of TFS used in exec commands</description>
        <executable>Tf.exe</executable>
        <buildArgs>workspaces /s:$(TfsServer)</buildArgs>
    </exec>

这是有效的,因为在我的场景中,我并不关心版本控制,就像工作区不同步一样。