2013-03-04 106 views
3

有什麼辦法可以完全清潔VS解決方案嗎?完全意味着不僅僅是去除由Active配置構建的項目的當前輸出。我的意思是清除所有輸出和中間文件,爲所有構建配置。我怎樣才能徹底清理我的VS 2012解決方案?

即使在更改構建輸出路徑之後,我想要刪除之前輸出路徑的輸出。

示例場景:我檢查一個源代碼樹並進行發佈構建,然後調試構建。現在我有\ bin \ Debug目錄和bin \ Release目錄以及\ obj目錄。然後我想清除兩種配置的輸出。

也許Subversion是一個更好的工具,例如,刪除所有不受源代碼管理的東西?否則,我想一個批量文件遞歸清除obj,bin和TestResults目錄可以做到這一點,我可以綁定一個VS菜單項到這個工具。

我使用SVN 1.7和VS 2012

有沒有人已經創造了這樣使用VS,SVN,PowerShell的還是Windows批處理文件的工具嗎?

回答

5

每當我向SVN添加一個全新的解決方案時,我確保在提交之前將每個項目的bin\obj\文件夾標記爲忽略。我對.suo file(個人偏好)也一樣。這樣,當我需要清理任何中間和生成輸出,我只是TortoiseSVN -> SVN Clean up ...和檢查Delete ignored files and folders

TortoiseSVN 1.7's Clean up Dialog

This article by Jeff Atwood影響了我。相關部分:

需要多長時間讓您的新團隊成員高效地開展項目工作?如果答案超過一天,您遇到問題

我希望能夠檢查出解決方案並首次構建它。我也希望能夠輕鬆地讓我的結賬「像新的一樣」,這就是爲什麼我使用SVN Cleanup這麼多。

需要注意的是,在執行SVN Cleanup之前,您可能必須先關閉Visual Studio,以便bin\obj\文件夾中的任何文件都未被鎖定。

希望這會有所幫助。

+0

是的,其實這就是我想要的東西。如果我可以將它綁定到VS菜單項,那將是理想的。我可以通過命令行來做到嗎?否則,我想我實際上寧願做批/ PS腳本來檢查svn狀態並刪除那些有狀態 – 2013-03-04 12:51:31

+0

[此鏈接](http://tortoisesvn.net/visualstudio.html)可能是你正在尋找。我使用[VisualSVN](http://www.visualsvn.com/visualsvn/),因爲它在[不在Active Directory域中的機器上] [免費](http://www.visualsvn.com/visualsvn/purchase/)和Just Works(TM)。 – 2013-03-04 14:40:26

+0

問題是:是否可以使用命令行進行清理?我看不到如何指定這些選項 – 2013-03-04 18:26:05

2

我們可以假設您的解決方案文件保留在名爲「MySolutionFolder」的文件夾中,並且它是在Subversion(SVN)下的代碼版本,並且您的本地計算機上安裝了TortoiseSVN客戶端來管理代碼版本控制。

然後,右鍵點擊您的代碼文件夾「MySolutionFolder」的文件夾。然後去選項TortoiseSVN --> Properties。在打開的新窗口中,單擊「新建」按鈕,在彈出列表中選擇「高級」選項。在出現的新窗口中輸入以下內容並保存。

SVN Ignore Window

後,那恰到好處的「MySolutionFolder」再次選擇該選項,TortoiseSVN --> Revert並在打開的新窗口中,單擊「刪除受控的項」。點擊它會列出所有未版本控制的文件,包括「bin」和「obj」文件夾,因爲它包含在svn:ignore列表和其他未版本控制的文件中。從中選擇要刪除的項目並按'確定'。你的代碼輸出將被清除。

這svn:忽略財產,你甚至可以提交與您的代碼一起,以便其他用戶也可以得到這個優點。

0

如果你需要一些細粒度的方法來清潔唯一入選的解決方案,或配置您可以使用這樣的腳本:

$devenvPath = "`"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv`"" 
$configuration = (
    "Release", 
    "Debug" 
) 
$platform = (
    "x86", 
    "x64" 
) 
$sln = (
    "Sln1Path.sln", 
    "Sln2Path.sln" 
) 
foreach ($c in $configuration) 
{ 
    foreach($p in $platform) 
    { 
     foreach($s in $sln) 
     { 
      $pc = $c + "|" + $p 
      $arg = "`"$s`" /clean `"$pc`"" 
      $cmd = "Start-Process -FilePath $devenvPath -ArgumentList `'$arg`' -Wait -NoNewWindow" 
      echo $cmd 
      $proc = invoke-expression $cmd 
      echo "`n`n`n`n`n" 
     } 
    } 
}