2012-03-21 82 views
4

我需要删除已从Visual Studio 2010解决方案中删除但尚未从文件系统中删除的文件(主要是.cs和.cshtml)。我知道如果选择“显示所有文件”选项,将显示这些文件,但是,我不想手动搜索它们,因为它会花费很多时间并且容易出错。VS2010 - 删除不在解决方案中的文件

有什么办法可以列出这些文件吗?我正在使用Visual Studio 2010和Resharper 6.1(也许Resharper有一些选项可以做到这一点)。

+0

难道它不适用于排除但未被删除的文件的扩展名吗? – jim31415 2012-03-21 15:49:32

+0

这些文件不包含在csproj文件中。你的意思是什么?排除扩展? – empi 2012-03-21 15:59:27

+0

对不起,它似乎只是ASP.NET项目功能。 – jim31415 2012-03-21 17:07:08

回答

3

我写了一个基于@ jovball的答案的PowerShell脚本。主要区别是我的接受.sln文件并删除从该解决方案中的所有项目排除的所有文件。

以下是发布此答案时的脚本版本。但请检查here获取最新版本。

<# 
.SYNOPSIS 
Find all files excluded from a Visual Studio solution with options to delete. 

.DESCRIPTION 
Finds all excluded files in all projects in the provided Visual Studio solution with options to delete the files. 

.PARAMETER Solution 
The path to the .sln file 

.PARAMETER VsVersion 
The Visual Studio version (10, 11, 12) (Used to locate the tf.exe file) 

.PARAMETER DeleteFromTfs 
Mark files as pending deletion in TFS 

.PARAMETER DeleteFromDisk 
Delete the files directly from the disk 

#> 

[CmdletBinding()] 
param(
    [Parameter(Position=0, Mandatory=$true)] 
    [string]$Solution, 
    [Parameter(Mandatory=$false)] 
    [ValidateRange(10,12)] 
    [int] $VsVersion = 12, 
    [switch]$DeleteFromDisk, 
    [switch]$DeleteFromTfs 
) 
$ErrorActionPreference = "Stop" 
$tfPath = "${env:ProgramFiles(X86)}\Microsoft Visual Studio $VsVersion.0\Common7\IDE\TF.exe" 
$solutionDir = Split-Path $Solution | % { (Resolve-Path $_).Path } 

$projects = Select-String -Path $Solution -Pattern 'Project.*"(?<file>.*\.csproj)".*' ` 
    | % { $_.Matches[0].Groups[1].Value } ` 
    | % { Join-Path $solutionDir $_ } 

$excluded = $projects | % { 
    $projectDir = Split-Path $_ 

    $projectFiles = Select-String -Path $_ -Pattern '<(Compile|None|Content|EmbeddedResource) Include="(.*)".*' ` 
     | % { $_.Matches[0].Groups[2].Value } ` 
     | % { Join-Path $projectDir $_ } 

    $diskFiles = Get-ChildItem -Path $projectDir -Recurse ` 
     | ? { !$_.PSIsContainer } ` 
     | % { $_.FullName } ` 
     | ? { $_ -notmatch "\\obj\\|\\bin\\|\\logs\\|\.user|\.*proj|App_Configuration\\|App_Data\\" } 

    (compare-object $diskFiles $projectFiles -PassThru) | Where { $_.SideIndicator -eq '<=' } 
} 

Write-Host "Found" $excluded.count "excluded files" 

if ($DeleteFromTfs) 
{ 
    Write-Host "Marking excluded files as deleted in TFS..." 
    $excluded | % { 
     [Array]$arguments = @("delete", "`"$_`"") 
     & "$tfPath" $arguments 
    } 
} 
elseif($DeleteFromDisk) 
{ 
    Write-Host "Deleting excluded files from disk..." 
    $excluded | % { Remove-Item -Path $_ -Force -Verbose} 
} 
else 
{ 
    Write-Host "Neither DeleteFromTfs or DeleteFromDisk was specified. Listing excluded files only..." 
    $excluded 
} 
+0

我明白你的观点,但由于脚本的内容是我的答案,所以看起来链接是合适的。我会在这里发布当前版本的脚本,但如果我对其进行更改(很有可能)并忘记更新我的答案,它可能会过时。我会尽我所能确保链接始终保持正常。 – mikesigs 2015-01-16 04:43:49

相关问题