2013-03-04 110 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" 
     } 
    } 
}