如何在项目文件夹中找到不再在项目中的.CS文件?

Bar*_*art 5 .net c# visual-studio

由于我们的项目多年来不断发展,许多.cs文件已从项目中删除,重命名等,但仍保留在源代码管理中.因此,当您提取最新代码时,您将获得所有这些.cs文件,这些文件在任何.csproj文件中都不再被引用.

任何人都知道一种简单,可靠的机制来检测这些文件并消除它们吗?

Jar*_*Par 5

最好使用脚本语言来执行此任务.我发现powershell非常适合这种情况.

第1步是查找csproj文件中包含的所有实际.cs文件.以下函数将在目录结构中搜索所有csproj文件,并返回这些文件中包含的.cs文件集

function Get-IncludedCsFiles() {
  param ( $rootPath = $(throw "Need a path") )
  $projFiles = gci -re -in *.csproj $rootPath
  foreach ( $file in $projFiles ) { 
    $dir = split-path $file.FullName
    foreach ( $line in (gc $file) ) { 
      if ( $line -match 'Compile\s+Include="([^"]+)"' ) {
        join-path $dir $matches[1]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在您需要做的就是将其包装到字典中,然后在目录结构中进行搜索

$map = @{}
$pathToSearch = "Path\To\Search"
Get-IncludedCsFiles $pathToSearch | 
%{
    if(!$map.Contains($_))
    {
      $map.Add($_, $true)
    } 
}
$notIncluded = gci -re -in *.cs $path | ?{ -not $map.Contains($_.FullName) }
Run Code Online (Sandbox Code Playgroud)