当前上下文中不存在名称 'SqlDataSourceEnumerator'

The name 'SqlDataSourceEnumerator' does not exist in the current context

在 Visual studio 的 c# .net 5 程序中,我正在测试使用 SqlDataSourceEnumerator

的代码
 public static List<SqlServerInstance> LocateSqlInstances()
        {
            List<SqlServerInstance> results = new List<SqlServerInstance>();

            using (DataTable sqlSources = SqlDataSourceEnumerator.Instance.GetDataSources())
            {
                foreach (DataRow source in sqlSources.Rows)
                {
                    string servername;
                    string instancename = source["InstanceName"].ToString();

                    if (!string.IsNullOrEmpty(instancename))
                    {
                        servername = source["ServerName"].ToString() + '\' + instancename;
                    }
                    else
                    {
                        servername = source["ServerName"].ToString();
                    }

                    results.Add(new SqlServerInstance() { ServerInstance = servername, Version = source["Version"].ToString() });
                }
            }

            return results;
        }

尽管我已经在使用 System.Data;我得到

错误 CS0103 名称 'SqlDataSourceEnumerator' 在当前上下文中不存在

为什么会这样?

此时 SqlDataSourceEnumerator 尚未针对任何版本的 .NET Core 或 .NET 5 实现。这是因为 .NET Framework 版本依赖于本机 C++ 实现和 .NET团队将需要将其重新实现为托管代码以符合他们的设计目标。 If/when 它已实现,将在 Microsoft.Data.SqlClient 包中。

dotnet/SqlClient github 存储库中有一个讨论:

请注意,这自 2017 年初就已为人所知,最后一次提到有任何解决方案来自 Jul 2020

在此实现之前,对于任何绝对必须使用 SqlDataSourceEnumerator 的应用程序,您都必须依赖 .NET Framework,或者找到一个 alternative method 来扫描 SQL 服务器。