2015-04-21 63 views
2

我正在將多個項目從Visual Studio 2005轉換爲Visual Studio 2012.在這樣做的過程中,我注意到「重建解決方案」選項對於多項目解決方案已經有了微妙的改變(我發現這種微妙的行爲改變得益於兩個veryhelpful關於SO的問題)。 VS 2005似乎這樣做對重建:如何重新定義「重建解決方案」在Visual Studio中的作用?

  1. 潔淨工程A + B
  2. 構建項目一
  3. 構建B項目

VS 2012似乎做到這一點:

  1. 清潔項目A
  2. 構建項目A
  3. 清理B項目
  4. 構建B項目

這是有問題時,這兩個項目是相互依存的,尤其是當輸出二進制文件放在同一個文件夾中。有沒有一種方法可以重新定義「重建解決方案」對於某個特定項目的作用,以反映2005年的行爲?

+0

當然在這個變化背後有幾個支持電話。健康的使用Build +每天清潔一次,它不會比這更多。構建咕嚕聲總是一個非常好的主意來清除這樣的問題。如果它建立在2臺機器上,那麼你感覺好了500%。 –

回答

2

不是一個簡單的方法。在命令行上通過VS或msbuild重建解決方案實際上包括將解決方案和項目文件轉換爲臨時msbuild文件,然後使用該文件中的重建目標調用msbuild。此次改造的目標恰好是類似這樣定義的

<ItemGroup> 
    <AllProjects Include="Project A"/> 
    <AllProjects Include="Project B"/> 
</ItemGroup> 

<Target Name="Rebuild"> 
    <MSBuild Projects="@(AllProjects)" Targets="Rebuild"/> 
</Target> 

因此,它總是會導致清潔/每個項目的建設。你想要的是

<Target Name="Rebuild" DependsOnTargets="Clean;Build"/> 

這將有效地調用清理所有項目,然後建設所有項目。

但是,我不認爲有一種方法可以與解決方案的轉換過程交互到msbuild文件,也不需要重新定義重建解決方案在VS中的作用(很可能存在但不是直截了當的)。 ('Tools-> External Tools ...-> Add'):將'Command'設置爲你的msbuild命令,將'Title'設置爲'CustomRebuild' ,將'Arguments'設置爲'$(SolutionDir)\ $(SolutionFileName)/ t:Clean; Build/p:Configuration = Debug; Platform = Win32'。然後你可以調用'Tools-> CustomRebuild'命令(也可以通過鍵盤等),它會做你想做的。但是,當然只適用於Debug | Win32。爲了擺脫這個問題,你可以寫一個自定義的擴展,因爲在那裏你可以訪問當前的配置和平臺(afaik),然後以編程方式編譯該解決方案。

該主題的變化:向您的解決方案添加一個空的Makefile項目(右鍵單擊 - >添加 - >新建項目 - >常規 - >生成文件項目)並在其屬性中設置'重建所有命令行'msbuild $(SolutionPath) /t:Clean;Build /p:Configuration=$(Configuration);Platform=$(Platform) 。然後打開配置管理器並從構建中排除該項目(以避免無限循環)。現在,如果右鍵單擊makefile項目並選擇「僅項目 - >僅重建」,它將有效地重建整個解決方案 - 但現在使用當前選定的配置和平臺。

相關問題