VB.Net编译错误:RecycleBin未声明,求解决办法
解决VB.Net中
RecycleBin is not declared编译错误 问题原因
你遇到的错误核心是:当前使用的Windows API Code Pack版本中,RecycleBin类并非直接在Microsoft.WindowsAPICodePack.Shell命名空间下直接暴露,或该类在你安装的NuGet包版本中存在调整/缺失。此外你的代码还存在两个隐性问题:StringBuilder未实例化、循环内频繁弹窗会导致交互混乱。
修正方案
方案1:修复原代码的命名空间与实例化问题
先确保完整引用RecycleBin类,同时修复StringBuilder未初始化、属性获取安全性问题:
Imports Microsoft.WindowsAPICodePack.Shell Imports System.Text Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 完整指定RecycleBin类的命名空间路径,避免命名冲突 Dim RecycledFiles As IEnumerable(Of ShellFile) = Microsoft.WindowsAPICodePack.Shell.RecycleBin.MasterBin.Files ' 必须实例化StringBuilder,否则会触发空引用异常 Dim sb As New StringBuilder() For Each Item As ShellFile In RecycledFiles sb.AppendLine($"文件名: {Item.Name}") ' 使用系统标准属性名获取删除日期,避免本地化或版本兼容问题 Dim deleteDateProp = Item.Properties.GetProperty("System.Recycle.DateDeleted") If deleteDateProp IsNot Nothing AndAlso deleteDateProp.ValueAsObject IsNot Nothing Then sb.AppendLine($"删除日期: {deleteDateProp.ValueAsObject.ToString()}") Else sb.AppendLine("删除日期: 无法获取") End If sb.AppendLine("---") ' 添加分隔线区分不同文件 Next Item ' 循环结束后统一展示结果,避免频繁弹窗 If sb.Length > 0 Then MsgBox(sb.ToString()) Else MsgBox("回收站为空") End If End Sub End Class
方案2:利用你已掌握的Shell32方式获取删除日期
既然你已经能通过SH.NameSpace(Shell32.ShellSpecialFolderConstants.ssfBITBUCKET)访问回收站,可直接用这种方式实现需求,无需依赖可能有问题的RecycleBin类:
Imports Shell32 Imports System.Text Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim recycleBin As Folder = New Shell().NameSpace(ShellSpecialFolderConstants.ssfBITBUCKET) Dim sb As New StringBuilder() If recycleBin.Items.Count = 0 Then MsgBox("回收站为空") Return End If For Each item As FolderItem In recycleBin.Items sb.AppendLine($"文件名: {item.Name}") ' Shell32中删除日期对应的属性索引为2(不同系统版本可通过recycleBin.GetDetailsOf(item, 2)验证) Dim deleteDate As String = recycleBin.GetDetailsOf(item, 2) sb.AppendLine($"删除日期: {deleteDate}") sb.AppendLine("---") Next MsgBox(sb.ToString()) End Sub End Class
关键注意事项
- 确认
WindowsAPICodePack-Core和WindowsAPICodePack-ShellNuGet包版本匹配,建议升级到最新稳定版,部分旧版本可能未包含RecycleBin类。 - 访问属性时优先使用系统标准属性名(如
System.Recycle.DateDeleted),而非自定义字符串,避免因系统本地化或版本差异导致获取失败。
内容的提问来源于stack exchange,提问作者rajeev
相关产品推荐
相关产品推荐

