[C#] MsBuild 與 Devenv的差異之處

[C#] MsBuild 與 Devenv的差異之處


前言

最近在測試將一個使用MapInfo的專案整合到TeamCity的自動化建置系統,

卻發生了使用MsBuild無法建置的狀況,產生了下列錯誤

 
ASPNETCOMPILER error ASPCONFIG: 找不到指定的模組。 (發生例外狀況於 HRESULT: 0x8007007E

 
但如果是用Visual Studio 2008進行建置卻是正常沒有問題的,

比較疑惑的是使用兩者進行建置的結果似乎不盡相同!?

 

差別比較

 上網查了一下資料,在Srikanth R的文章找到瞭解釋,

通常在一般的情況之下,

開發者會使用Devenv (也就是Visual Studio)來進行建置,

而Build Machine則會使用Msbuild來建置,

 

Devenv會使用Msbuild來建置專案,

但Msbuild並不能建置Visual C++的專案,

所以當MsBuild發現Solution中包含VC++的專案時,

它會使用Vcbuild來建置,這個行為在Devenv中是相同的。

 

所以如果是C++的專案,將不會呼叫Msbuild,

Devenv使用Msbuild來建置C#和VB的專案,

但遇到C++專案時,會使用Vcbuild來建置。

 

在Visual Studio 2010的版本中,

已經使用Msbuild來取代Vcbuild建置VC++的專案了

 

結語

目前推測可能建置失敗的原因,是因為MapInfo中使用了C++的核心,

而用Msbuild建置時無法處理相關的東西,

所以造成了失敗,至於解決的方法如果有找到之後再分享給大家。

 

參考文章:

Difference between MSBuild and devenv