Подтвердить что ты не робот

Удалить неиспользуемые cs файлы в решении

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

4b9b3361

Ответ 1

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

script может либо удалить неиспользуемые файлы с диска, либо отложить их как удаленные в 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
    }
}

Ответ 2

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

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

Ответ 3

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

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