C# SMO 和 SqlEnum 引用错误

C# SMO and SqlEnum references error

我正在通过 VS2013 做一个使用 smo 对象的 C# 项目。 我安装了

Install-Package Microsoft.SqlServer.Scripting
Install-Package Microsoft.SqlServer.SqlEnum.dll

来自 Nuget

并包括

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo.Agent;

但出现以下错误

Error 9 Assembly 'Microsoft.SqlServer.Smo, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' uses 'Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' which has a higher version than referenced assembly 'Microsoft.SqlServer.SqlEnum, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'

有手牌吗?

问题是 SmoSqlEnum 组件之间的版本不匹配,如异常所指定。 问题是您使用的包 Install-Package Microsoft.SqlServer.SqlEnum.dll 是 SQL Server 2008 的旧包。

在您的 SQL 服务器安装文件夹中有包含必要 DLL 文件的文件夹 (Microsoft.SqlServer.SqlEnum.dll, Microsoft.SqlServer.ConnectionInfo.dll, Microsoft.SqlServer.Smo.dll)

  • SQL 服务器 2012 C:\Program Files\Microsoft SQL Server0\SDK\Assemblies
  • SQL 服务器 2014,2016 C:\Program Files\Microsoft SQL Server0\SDK\Assemblies

您也可以从 Nuget 将您需要的所有 DLL 安装在一个包中:

2012 年:https://www.nuget.org/packages/Unofficial.Microsoft.SQLServer.SMO/

2014 年:https://www.nuget.org/packages/Unofficial.Microsoft.SQLServer.SMO.2014/

Included DLLs: Microsoft.SqlServer.ConnectionInfo.dll, Microsoft.SqlServer.ConnectionInfoExtended.dll, Microsoft.SqlServer.Management.Sdk.Sfc.dll, Microsoft.SqlServer.Smo.dll, Microsoft.SqlServer.SmoExtended.dll, Microsoft.SqlServer.SqlClrProvider.dll, Microsoft.SqlServer.SqlEnum.dll

您应该使用您在创建对 Microsoft.SqlServer.Smo 的引用时使用的 SDK\Assemblies 文件夹中的 Microsoft.SqlServer.SqlEnum.dllMicrosoft.SqlServer.ConnectionInfo.dll 文件。或者您应该从 NuGet 安装匹配的程序集。 DLL 版本 11.0.0.0 代表 SQL Server 2014。

参见Files and Version Numbers and Create a Visual C# SMO Project in Visual Studio .NET

如果您只从 NuGet 安装一个正确的包,例如 https://www.nuget.org/packages/Unofficial.Microsoft.SQLServer.SMO.2014/,您应该没问题。