Удалить неиспользуемые cs-файлы в решении - PullRequest
12 голосов
/ 10 января 2012

У меня есть большое решение, и есть много * .cs-файлов, которые на самом деле больше не принадлежат моему решению (не входят в csproj-файлы).Есть ли способ найти их все и удалить?

Ответы [ 3 ]

7 голосов
/ 02 мая 2014

Этот скрипт PowerShell должен делать то, что вы ищете. Он анализирует файл проекта, чтобы получить включенные файлы кода. Затем он сравнивает этот список с реальными файлами на диске. Остальные файлы - ваши неиспользуемые / устаревшие файлы.

Сценарий может удалять неиспользуемые файлы с диска или ожидает их удаления в TFS.

<#
.SYNOPSIS
Find and process files in a project folder that are not included in the project. 


.DESCRIPTION
Find and process files in a project folder that are not included in the project. 
Options to delete the files or to add them as pending deletes for TFS. Use TF.exe to pend the deletes and start the check-in process for the files.
This is necessary when trying to delete files that are not currently included in a Visual Studio project.

.PARAMETER Project
The path/name for the project file. 

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

.PARAMETER DeleteFromDisk
Just delete the files from disk. No interaction with any source control.

.PARAMETER TfsCheckin
After pending the deletes, open the check-in dialog.

#>

[CmdletBinding()]
param(
    [Parameter(Position=0, Mandatory=$true)]
    [string]$Project,  
    [Parameter(Mandatory=$false)]
    [ValidateRange(10,12)] 
    [int] $VsVersion = 12,
    [switch]$DeleteFromDisk,
    [switch]$TfsCheckin
)

$ErrorActionPreference = "Stop"
$tfPath = "${env:ProgramFiles(X86)}\Microsoft Visual Studio $VsVersion.0\Common7\IDE\TF.exe"

$projectPath = Split-Path $project


if($Project.EndsWith("csproj"))
{
    $fileType = "*.cs"
}
else
{
    $fileType = "*.vb"
}
$fileType


$projectFiles = Select-String -Path $project -Pattern '<compile'  | % { $_.Line -split '\t' } | `
     % {$_ -replace "(<Compile Include=|\s|/>|["">])", ""} | % { "{0}\{1}" -f $projectPath, $_ }
Write-Host "Project files:" $projectFiles.Count


$diskFiles = gci -Path $path -Recurse -Filter $fileType | % { $_.FullName}
Write-Host "Disk files:" $diskFiles.Count


$diff = (compare-object $diskFiles $projectFiles  -PassThru) 
Write-Host "Excluded Files:" $diff.Count

#create a text file for log purposes
$diffFilePath = Join-Path $projectPath "DiffFileList.txt" 
$diff | Out-File $diffFilePath  -Encoding UTF8
notepad $diffFilePath


#just remove the files from disk
if($DeleteFileOnly)
{
    $diff | % { Remove-Item -Path $_ -Force -Verbose}
}
else #TFS options
{
    #this will add the files as pending deletes in TFS (awaiting check-in)
    $diff | % {
        [Array]$arguments = @("delete", "`"$_`"")
        & "$tfPath" $arguments
    }

    if($Checkin)
    {
        #start the check-in process for the pending deletes
        [Array]$arguments = "checkin", "/recursive", "$projectPath"
        & $tfPath $arguments
    }
}
6 голосов
/ 10 января 2012

При выборе проекта в обозревателе решений нажмите кнопку «Показать все файлы» на панели инструментов обозревателя решений. Это покажет вам файлы и папки в каталоге проекта, но которые не включены в проект. Это позволяет вам удалять их или читать их в проект.

Я не знаю автоматизированного решения, поэтому вам придется делать это для каждого проекта вручную.

2 голосов
/ 02 мая 2014

Используйте Visual Studio, чтобы добавить все файлы в систему контроля версий. Он будет добавлять только те файлы, которые являются частью проекта, поэтому файлы, не относящиеся к проекту, не будут добавлены. Затем вы можете просто зафиксировать все файлы и проверить проект в другом месте. Только соответствующие файлы будут проверены в целевом местоположении.

Учитывая, что у вас большой проект, конечно, маловероятно, что вы еще не получили какой-либо контроль источника, поэтому, возможно, вам придется разорвать существующее соединение, очистить исходное местоположение источника после извлечения в новом месте Скопируйте цель на оригинал, и пусть оригинал scm обнаружит удаление файла в оригинале и отправит удаление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...