为啥即使在添加程序集“Microsoft.SqlServer.ConnectionInfo”之后 C# 也无法识别 Server()

Posted

技术标签:

【中文标题】为啥即使在添加程序集“Microsoft.SqlServer.ConnectionInfo”之后 C# 也无法识别 Server()【英文标题】:Why C# does not recognize Server() even after adding assembly "Microsoft.SqlServer.ConnectionInfo"为什么即使在添加程序集“Microsoft.SqlServer.ConnectionInfo”之后 C# 也无法识别 Server() 【发布时间】:2018-10-11 09:04:59 【问题描述】:

找不到类型或命名空间名称“Server”(您是否缺少 using 指令或程序集引用?)

string connetionString = @"connectionStirng"; 
SqlConnection conn = new SqlConnection(connetionString); 
var server = new Server(new ServerConnection(conn));

添加到顶部

using Microsoft.SqlServer.Management.Common;

仍然报错。 有任何帮助。

已检查:Why i'm getting error for the Microsoft.SqlServer.Server namespace?I can't add Microsoft.SqlServer.Management.Common to my ASP.NET MVC Application

【问题讨论】:

你检查过你项目中的引用吗? "您是否缺少 using 指令或程序集引用?" - 您添加了使用,但您是否还添加了程序集引用? @Han:是的,是的 确保C:\Program Files (x86)\Microsoft SQL Server\140\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dll 在您项目的引用中。如果您使用不同的 SQL Server,该文件夹可能会有所不同。我的是 VS 2017 中捆绑的 SQL Express。 那些似乎正在使用来自 Microsoft.SqlServer.Management.Smo 命名空间的 SMO 对象,例如Server 【参考方案1】:

安装这个 nuget 包:

https://www.nuget.org/packages/Microsoft.SqlServer.SqlManagementObjects

然后添加 using 指令:

使用 Microsoft.SqlServer.Management.Smo;

现在您可以创建服务器对象了。

var server = new Server();

安装 SMO

从 SQL Server 2017 SMO 开始分发为 Microsoft.SqlServer.SqlManagementObjects NuGet 包允许用户 使用 SMO 开发应用程序。

这是 SharedManagementObjects.msi 的替代品,它是 以前作为每个版本的 SQL 功能包的一部分发布 SQL Server 的。应更新使用 SMO 的应用程序以使用 NuGet 包,并将负责确保 二进制文件与正在开发的应用程序一起安装。

https://docs.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/installing-smo?view=sql-server-2017

【讨论】:

它已经添加到引用中并且存在于您指定的文件夹中。仍然出错 无法安装,因为 NuGet 版本需要 2.12,但我可以更新 NuGet,因为 VS 2012。见***.com/questions/27384885/… @SureshKamrushi 我看到了你的截图。你写了new server(...)。应该是new Server(...)。 C# 区分大小写。 using directive,而不是 usingstatement。 C# 有两个功能都使用using 关键字。使用一个人的名字来指代另一个人无助于交流。 由于安装了“Microsoft.SqlServer.SqlManagementObjects”而解决。错字是因为我尝试了不同的案例。【参考方案2】:

按照 Han 的建议,请检查程序集引用路径并确保文件在引用的位置。我遇到了类似的问题,这是在开发环境中工作,但在测试服务器上出错。原因是测试服务器上没有安装 SQL Server Management Studio。所以我将所需的程序集从开发机器复制到测试服务器上应用程序的 bin 文件夹中,并且工作正常。

【讨论】:

【参考方案3】:

您可以尝试添加对以下内容的引用吗:

Microsoft.SqlServer.dac.dll

如果找不到dll,则需要安装SSDT(Sql Server Data Tools)。

【讨论】:

以上是关于为啥即使在添加程序集“Microsoft.SqlServer.ConnectionInfo”之后 C# 也无法识别 Server()的主要内容,如果未能解决你的问题,请参考以下文章

为啥在尝试添加引用时会看到“无法发出程序集:引用的程序集...没有强名称”?

GAC - 要将程序集添加到 GAC,拖放可以,但复制和粘贴不行?为啥?

C#中想用messageBox这个类,为啥要添加引用才能使用求解答

以下程序集是原子的,如果不是,为啥?

为啥?单元测试覆盖率中显示的类即使没有添加到测试目标中

为啥将返回类型添加到 void 返回方法会导致 MissingMethodException