我已經繼承了由幾個項目組成的解決方案,它是VB.NET和C#的混合體。它使用IDE「Build Solution」按鈕進行構建。它不會使用「msbuild foo.sln」從命令行構建;該錯誤消息表明項目A(引用項目B)找不到項目B.事實上,在使用「msbuild」並在使用IDE之後將其與內容進行比較後,檢查「bin」文件夾的內容時,我可以發現很多缺失的DLL,包括B.dll。爲什麼VS2008版本與msbuild相同的解決方案有所不同?
簡而言之:項目A 確實有一個參考項目B,但B.DLL只複製到A的bin目錄使用IDE時,但不是使用msbuild時。如果我在IDE構建後運行msbuild,它會起作用,因爲複製了引用的DLL。
我曾天真地認爲「msbuild foo.sln」與foo.sln的IDE版本相同。這似乎並非如此。關於Stack Overflow,至少有三個類似的問題,但我不能引用它們,因爲「新用戶只能發佈一個超鏈接」(!!)。抱歉。這裏有問題的標題,所以你可以搜索自己:
- different results using msbuild project.sln build vs vs2008 IDE build
- MSBuild builds projects with project references correctly but not from solution
- 這裏,由約翰·桑德斯的答案建議使用「devenv的」,這確實爲我工作。
- MSBuild doesn’t pick up references of the referenced project
現在,這裏是我的問題:
- 在何處可以找到準確記錄什麼的Visual Studio確實當你 「生成解決方案」?
- 什麼是配置Visual Studio和持續集成服務器(例如Hudson)的最佳實踐,以便開發人員工作站的構建與CI構建相同?
- 我們應該如何設置CI服務器以使用約翰桑德斯建議的devenv?
- 或者我們應該爲Visual Studio編寫一個MSBuild腳本以便按照http://brennan.offwhite.net/blog/2007/05/31/running-msbuild-from-visual-studio/的建議使用?
- 別的東西......?
我是從UNIX世界,所以覺得免費送我的新手指針。
至於傳遞閉包問題:我確實有項目A取決於B和C,以及項目B取決於C.仍然失敗。 –
好的答案,我討厭這個事實,即visual studio不使用msbuild獨佔,它會在連續構建服務器等上創建各種問題,其中人們使用.sln文件作爲構建文件而不是手工製作自己的文件,我經常設置UseHostCompilerIfAvailable爲false,但我傾向於在提交到存儲庫之前進行最終構建時這樣做。 –