问题
我正在将构建移植到更新版本的CC.Net(从1.4.4到1.6的最新版本)。以前,使用<msbuild />
标记构建混合<exec />
标记,并使用tf.exe
命令调用批处理文件。
构建必须依赖于msbuild
和tf.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版本?或者还有另一种解决方法吗?
答案 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>
这是有效的,因为在我的场景中,我并不关心版本控制,就像工作区不同步一样。