2011-06-15 101 views
4

我有一個包含許多項目的大型解決方案,其中之一是安裝項目。還有許多當前版本存儲在單獨的分支中。我有一個用於在.NET 2中工作的構建工具,但自從我們升級到.NET 4後,該工具就無法工作。如何以編程方式從C#代碼構建我的解決方案文件?

內部,構建工具的新.NET 4版本使用Microsoft.TeamFoundation.Client.RegisteredTfsConnections.GetProjectCollections()versionControlServer.GetAllTeamProjects(false)獲取從我的TFS源控制服務器收集TeamProject

我然後在UI視覺上顯示它們,當用戶點擊一個特定的解決方案版本,應用程序調用下面以獲得最新的該解決方案版本:

workspace.Get(new string[] { serverPath }, VersionSpec.Latest, RecursionType.Full, 
    GetOptions.GetAll); 

用於構建應用程序解決方案文件,這將包括安裝項目。在這個階段,安裝項目會創建一個可以安裝應用程序的MSI。這是我遇到問題的最後一步。

我需要能夠以編程方式構建用戶使用C#代碼選擇的解決方案。這樣做的工作.NET 2代碼如下:

Process process = new Process(); 
ProcessStartInfo processStartInfo = process.StartInfo; 
processStartInfo.FileName = processName; 
processStartInfo.Arguments = string.Format(" \"{0}\" /BUILD \"Release|Any CPU\"", 
    solutionPath); 
processStartInfo.WorkingDirectory = processDirectory; 
process.Start(); 

在進行此操作運行沒有錯誤,但它不再將啓動Visual Studio和構建代碼。顯然,這是一個很糟糕的做法,但我無法找到使用TFS類的「正確」方式。

我也嘗試直接運行MSBuild.exe(類似於上面的例子),並且這確實構建瞭解決方案,但由於某種原因不會生成生成MSI的安裝項目。請注意,我不使用任何手動創建的構建文件。

不幸的是,Microsoft.TeamFoundation命名空間的有用文檔很難找到!我希望這裏有人利用這些課程,並且可以指導我解決這個問題。

如果可能的話,我需要使用.NET類(例如不是Process.Start),因爲我真的需要知道構建何時完成。但是,如果這個問題太多,我可以爲此設置一個FileSystemWatcher對象。

+1

我討厭將您引導至商業產品,但您遇到的問題是我們切換到使用FinalBuilder的確切原因。 – 2011-06-15 12:31:45

+0

我正要提出這個建議。 – Bex 2011-06-15 12:33:02

+0

「C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBUILD.exe」「C:\ .. \ ... sln」/ target:publish/p: Configuration = Release/p:Platform =「Any CPU」/ v:minimal/nologo 這對我們很有用 – CodingBarfield 2011-06-15 13:05:29

回答

1

事實證明,問題很不幸完全無關。要更新的.NET 2代碼已將'Program Files'硬編碼到devenv.exe文件路徑中,但新計算機爲64位,Visual Studio 2010安裝在'Program Files(x86)'中!

所以這意味着上面的代碼示例工作,並將允許我從C#構建解決方案。這不是面向對象的方式,我寧願這麼做,但是在你所有的評論之後,我只是很高興能夠完成它。

感謝您的時間每個人。

4

msbuild跳過安裝程序項目,因爲它不知道如何構建它們。 FinalBuilder彈出devenv.exe來構建這些。

調用`devenv/build「Release | Any CPU」/ project「MyInstaller.vdproj」應該從命令行運行所需的版本,而無需啓動VS GUI。嘗試一下!

說了這麼多:我們也使用FinalBuilder,並且VS Installer已被棄用,因此您可能需要計劃替換它。

+0

+1解釋爲什麼MSBuild不工作......感謝Craig。 – Sheridan 2011-06-15 13:25:14

相關問題