2010-11-15 90 views
10

只是爲了讓我更清楚,我想問問你們正確的狀態(S)有你的什麼時候應該使用ReBuild而不是Build?

項目或解決方案重建的而不是在Visual Studio構建

如果我改述:爲什麼MS需要在Visual Studio中創建「重新構建所有」選項?他們主要的動機是什麼?

謝謝!

回答

7

DRY:Rebuild = Clean +爲每個項目輪流建造。

構建不會刪除以前的構建輸出。 重建會刪除它們並重新構建(如果您處於解決方案中,則一次一個項目:刪除proj1 \ bin \ Debug,構建proj1,刪除proj2 \ bin \ Debug ...)。

當我需要更新我的解決方案的第三個依賴關係時,我重建(或乾淨的構建)的主要情況。讓我們來看看下面的文件夾樹:

 
    SOLUTION 
     |__Dependencies 
     |__PROJ_1 
     |__bin 
     |__obj 
     |__(code) 
     |__PROJ_2 
     |__bin 
     |__obj 
     |__(code) 

如果我改變我的dll中的相關性和不做重建,VS(和的MSBuild)將仍然使用以前的DLL版本是在PROJ_N \ BIN \調試(或者斌\發佈),因爲依賴查找順序(見http://www.beefycode.com/post/Resolving-Binary-References-in-MSBuild.aspx):

  1. 文件從當前項目 - 參考路徑屬性,它來自.USER文件 - 由{CandidateAssemblyFiles}
  2. $(ReferencePath)表示。
  3. 引用項目本身的提示路徑,由{HintPathFromItem}指示。
    ...

在bin文件夾中的DLL雲在第一查找情況下,依賴文件夾中的DLL來在第二種情況下...

在這種情況下,我會做一個乾淨的(調試),清理(發佈),然後構建,以根除bin文件夾中的所有先前版本。我可能有點矯枉過正,重建可能已經足夠,但我不確定,因爲dll在Debug和Release文件夾中......

+0

換句話說,'Rebuild' ='Clean' +'建設' – abatishchev 2010-11-15 09:29:31

+0

大部分時間,對於單個項目,是的。請參閱http://stackoverflow.com/questions/1247457/difference-between-rebuild-and-clean-build-in-visual-studio-2008。 – 2010-11-15 09:33:25

+1

在你的Microsoft.Common.Targets中,你可以看到對於一個項目Rebuild = BeforeRebuild;清潔; $(_ ProjectDefaultTargets); AfterRebuild; – 2010-11-15 09:36:27

1

有時事情會出錯,構建不起作用。

發生這種情況例如當我沒有正確地更新依賴庫,然後沒有正確地複製到版本的bin路徑。還有其他一些例子,不介意。

那是當我使用重建。

相關問題