我有一個包含許多項目的大型解決方案,其中之一是安裝項目。還有許多當前版本存儲在單獨的分支中。我有一個用於在.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
對象。
我討厭將您引導至商業產品,但您遇到的問題是我們切換到使用FinalBuilder的確切原因。 – 2011-06-15 12:31:45
我正要提出這個建議。 – Bex 2011-06-15 12:33:02
「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