1

當我們通過MSBuild運行我們的構建時,MSBuild在/下運行什麼上下文?MSBUILD運行在什麼上下文中?

我問的原因是因爲如果項目是通過VS2010構建的(在同一臺機器上),但是我們的系統沒有工作,我有預構建事件調用命令行程序(ajax minification)構建系統(CCNet)正在構建它。我得到的錯誤是9009,這意味着它無法找到該文件。命令行程序爲它的位置設置了一個環境路徑(環境路徑是通過setx設置的,也許它是唯一爲當前用戶設置的?),因此只有在CCNet調用MSBuild時,只調用其名稱才能完美地工作。

+0

預構建事件由MSBuild Exec類執行。它在cmd.exe的隱藏實例中運行命令。工作目錄設置爲項目的輸出目錄,初始環境從父進程繼承。 *不*使用SETX,不會修改環境。使用SET。使用PATH來改變路徑。 – 2013-02-12 22:08:17

+0

你能解釋我應該在哪裏使用SET PATH?我在安裝ajax縮小程序後使用了SETX。我如何在預生成事件中使用SET PATH? – BlueChameleon 2013-02-13 14:41:20

+1

只需將它放在預構建事件中:set path = c:\ foo \ bar;%path%。 – 2013-02-13 14:45:40

回答

1

MSBuild就像任何其他開發工具一樣,它運行在任何啓動它的用戶上下文中。

當您通過Visual Studio運行msbuild時,它將像您一樣運行,因爲您的登錄上下文運行Visual Studio,而Visual Studio又運行構建。

如果通過一些構建服務運行它,答案將取決於構建服務的運行方式。例如,TFS Build就會以您爲TFS Build服務的登錄憑證配置的用戶身份啓動MSBuild。如果您已將CC.NET配置爲作爲服務運行,那麼您還必須指定它運行的是哪個用戶。那就是MSBuild也會運行的那個人。

如果您需要爲構建設置特定的環境,您有幾個選項。最簡單的一個,儘管非常「巨錘」的做法,是爲所有用戶在生成機器上全局配置環境。其他選項包括在構建中運行某種預配置步驟,或者在設置環境後編寫啓動批處理文件以手動啓動服務。