2014-06-27 527 views
7

我正嘗試使用MSBUILD從命令行清理並重建包含多個項目的解決方案文件。出於某種原因,我的構建失敗(大約10%的構建項目失敗),並且出現多個錯誤,這些錯誤都是這樣的:Visual Studio構建成功,MSBuild失敗

錯誤CS0234:命名空間「bar」中不存在類型或名稱空間名稱「foo」 (是否缺少程序集引用?)

現在,如果我清理和與它沒有錯誤成功打造完全一樣的配置,重建從Visual Studio 2010中相同的解決方案文件。

從Visual Studio的MSBuild的設置或配置有什麼不同,需要改變,我不知道?

回答

1

嘗試檢查MSBuild無法在非建築庫的項目文件中找到的引用的路徑。有時,當您使用VS或ReSharper爲您自動添加引用時,路徑最終會到達\ obj目錄。 VS似乎能夠應付這一點,但MSBuild沒有那麼多。

+1

我已經能夠找出問題所在。在64位環境中構建MSBuild時只會失敗,我可以在32位機器上成功構建。我確保使用C:\ Windows \ Microsoft.NET \ Framework64目錄下的MSBuild.exe,而不是常規的Framework目錄。現在,我只需要弄清楚要更改哪些項目,以使這些項目無法兼容64位版本 –

2

我不得不處理這個問題,事實證明的MSBuild喜歡生成的二進制文件移動到二進制文件\ release目錄和引用這些,而不是項目本身,當它建立的東西。構建完成後,將文件複製到此目錄。這解釋了爲什麼它在Visual Studio中工作,而不是msbuild(我目前使用TFS 1010)。

在我來說,我有一個DLL的一個老的二進制版本通過,目前正在本應產生正確的文件一前一後建立了一個項目所引用。舊版本(二進制)覆蓋新版本(從源代碼構建),因爲引用二進制版本的解決方案正在稍後構建。

0

在我的情況下,我有一個PCL引用另一個具有不同目標的PCL。 Visual Studio向我展示了第一個庫的引用列表中的警告,但編譯瞭解決方案,而MSBUILD拒絕編譯。我通過重新定位PCL來解決問題。希望這有助於某人。

1

我假設項目的構建方式有所不同,因爲Visual Studio不運行MSBuild,因爲它主持了構建引擎本身。 已回答here

但是,我有類似的問題。

在我的案例中,項目引用了一個外部庫,該庫被放置在項目的子目錄中,不太名爲「packages」。

運行MSBuild後,該文件夾的內容被刪除,據說由Nuget再次下載。

顯而易見的解決方案是重命名文件夾,它的工作。

相關問題