2011-08-18 64 views
1

問題指定Tf.exe和版本的MSBuild在CC.Net

我移植構建以CC.Net的新版本(1.4.4從一個非常最新版本爲1.6)。以前的版本混合<msbuild />標籤與<exec />標籤調用其中的tf.exe命令的批處理文件。

構建必須依賴於源代碼控制版本作爲msbuildtf.exe命令之間是相同的,因爲現在我上tf.exe命令是錯誤的:

無法確定工作區。

當我啓動命令提示符時,服務正在使用同一用戶的runas,並調用相同命令(使用同一目錄)使用的批處理文件,我得到同樣的錯誤。

但是,如果我啓動一個Visual Studio 2010命令提示符和runas,並調用該命令(來自同一目錄),我不會收到錯誤。

這也有道理,因爲%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版本?還是有另一種方法來解決這個問題?

回答

1

據我所知,沒有辦法直接用msbuild指定。在我們這裏解決問題的方式是,我們將msbuild的可執行文件設置爲bat文件,該文件基本上是所需的vcvars -script的副本(由Visual Studio命令提示符用於設置環境)。

<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>屬性以及設置你想要的路徑。

+0

'vcvars'解決方案聽起來很有希望。它適用於任何類型的任務。您是否有方便的方式獲取現有文件的路徑,或者您是否通過手動過程將文件複製到工作文件夾? –

+1

找到了我可以找到vcvars批處理文件:'「$(Vs80ComnTools)\ .. \ .. \ VC \ vcvarsall.bat」'。 'executable'元素也非常有用,可以在'sourcecontrol'元素中使用。 –

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> 

這工作,因爲在我的情況,我不關心的版本,就像我做一下工作區不同步的。