背景

在 Git 重新拉取 .NET 项目后,Visual Studio 报出大量"找不到基础类型"的错误,例如:

  • The type 'System.Object' is defined in an assembly that is not referenced
  • Predefined type 'System.Void' is not defined or imported

项目代码本身没有问题,错误源于本地缓存的构建产物与当前代码状态不一致。

解决方案

删除各子项目下的 binobj 文件夹,然后重新打开解决方案,让 VS 重新构建即可。

手动删除

在解决方案根目录下,逐个删除每个项目的 binobj 文件夹。适合项目数量较少的情况。

PowerShell 脚本批量清理

对于包含多个子项目的解决方案,可以使用以下脚本一键清理:

param(
    [Parameter(Mandatory=$true)]
    [ValidateScript({Test-Path $_ -PathType Container})]
    [string]$TargetPath
)

# 计算总文件夹数量(用于进度显示)
$totalItems = (Get-ChildItem -Path $TargetPath -Recurse -Directory |
              Where-Object { $_.Name -in 'bin','obj' }).Count

if ($totalItems -eq 0) {
    Write-Host "在目标路径中未找到 bin 或 obj 文件夹" -ForegroundColor Yellow
    exit
}

Write-Host "即将删除 $totalItems 个文件夹 (bin/obj)" -ForegroundColor Cyan
$confirmation = Read-Host "确认删除?(输入 YES 继续,其他键取消)"
if ($confirmation -ne "YES") {
    Write-Host "操作已取消" -ForegroundColor Yellow
    exit
}

# 查找并删除文件夹
Get-ChildItem -Path $TargetPath -Recurse -Directory -ErrorAction SilentlyContinue |
Where-Object { $_.Name -in 'bin','obj' } |
ForEach-Object -Begin { $i=0 } -Process {
    $i++
    $percent = [math]::Round(($i / $totalItems) * 100, 2)
    Write-Progress -Activity "正在删除文件夹" -Status "$percent% 完成 ($i/$totalItems)" `
                   -PercentComplete $percent -CurrentOperation $_.FullName
    
    try {
        # 尝试删除文件夹(强制删除只读文件)
        Remove-Item $_.FullName -Recurse -Force -ErrorAction Stop
        Write-Host "成功删除: $($_.FullName)" -ForegroundColor Green
    }
    catch {
        Write-Host "删除失败 [$($_.FullName)]: $($_.Exception.Message)" -ForegroundColor Red
    }
}

Write-Progress -Activity "正在删除文件夹" -Completed
Write-Host "操作完成!共处理 $totalItems 个文件夹" -ForegroundColor Cyan

使用方法

  1. 将上述脚本保存为 rmbin.ps1(文件名可自定义,后缀为 .ps1
  2. 在脚本所在目录打开终端,运行:
.\rmbin.ps1 -TargetPath "C:\your\solution\path"
  1. 输入 YES 确认,即可批量删除所有 binobj 文件夹

说明:脚本支持进度显示和错误处理,可根据需要自行修改。

总结

项目 说明
触发条件 Git 拉取代码后,本地 bin/obj 缓存与代码不一致
错误表现 找不到 System.ObjectSystem.Void 等基础类型
解决方法 删除所有 binobj 文件夹后重新打开解决方案
适用场景 .NET 项目在 Git 操作后出现大量基础类型缺失错误