删除解决方案中未使用的cs文件

本文关键字:cs 文件 未使用 解决方案 删除 | 更新日期: 2023-09-27 18:19:56

我有一个大的解决方案,有很多*.cs文件实际上不再属于我的解决方案(不包括在csproj文件中)。有没有办法找到所有这些并将其删除?

删除解决方案中未使用的cs文件

此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
    }
}

在解决方案资源管理器中选择项目时,单击解决方案资源管器工具栏中的"显示所有文件"按钮。这将显示项目目录中的文件和文件夹,但这些文件和文件夹不包含在项目中。这允许您删除它们或将它们重新读取到项目中。

我不知道自动化的解决方案,所以你必须手动为每个项目做这件事。

使用visualstudio将所有文件添加到源代码管理中。它只会添加属于项目的文件,因此不会添加非项目文件。然后,您可以简单地提交所有文件,并在其他地方签出该项目。只有相关文件才会在目标位置检出。

考虑到你有一个大型项目,当然你不太可能还没有某种源代码管理,所以你可能不得不断开现有的连接,在签出后清除原始源位置到新位置,将目标复制到原始位置,让原始scm检测到原始位置中的文件删除并提交删除。

首先必须停止调试(shift+F5)。之后,您可以右键单击*cs类并简单地将其删除。