如何解决此SQL / C#DLL冲突

时间:2017-07-19 17:08:10

标签: c# sql-server dll server connection

我使用C#(Visual Studio)开发了一个应用程序,它在我的Windows 10开发PC上运行没有问题。但是,当我将应用程序复制到其目标PC并运行它(Server 2012 R2)时,我收到一个异常通知我无法加载文件或程序集: Microsoft.SqlServer.ConnectionInfo,Version = 13.100。 0.0

如果我将dll的第13版复制到目标PC的程序目录并运行应用程序,那么我会得到一个异常通知我它无法找到dll的第14版。将版本14复制到目标然后给我原始异常,依此类推。

我引用了应用程序中所有必需的dll,即:

  • Microsoft.SqlServer.ConnectionInfo.dll(给我的那个 问题)。 Microsoft.SqlServer.Management.Sdk.Sfc.dll Microsoft.SqlServer.Smo.dll Microsoft.SqlServer.SqlClrProvider.dll Microsoft.SqlServer.SqlEnum.dll Microsoft.Web.Administration.dll

所有设置为:特定版本=假。

所有必要的框架都安装在服务器上。此外,服务器上还安装了以下内容,程序与之交互:

•ColdFusion

•SQL Server 2012(和2008,但程序不使用此实例)

.exe是通过安装程序安装的,该安装包含必要的dll,这些dll安装在与exe相同的目录中。

目录上提供了完全权限,程序本身具有最高的访问级别。

连接字符串可由用户选择,默认为正确的连接字符串,具体取决于程序的安装位置。

有没有人有任何想法可以帮助我解决这个冲突?

提前感谢所有人。

此致 肯

其他信息

Visual Studio中显示的Microsoft.SqlServer.ConnectionInfo.dll的版本号为13.100.0.0。我将DLL从属性中显示的路径复制到程序目录。你猜怎么着?当我运行该程序时,异常通知我它找不到版本14.100.0.0!

这是与文件属性页面上显示的相同DLL的版本:13.0.16106.4。

2 个答案:

答案 0 :(得分:2)

SMO始终安装在GAC中,因此将您复制到/ bin文件夹的文件并不重要。 GAC' d程序集覆盖了本地程序集。

您已引用SMO的SQL 2016版本。因此,您必须在目标服务器上安装它,或者根据目标服务器上已存在的SMO版本构建项目。

请参阅 https://docs.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/files-and-version-numbers

请注意,由于加载和部署SMO的麻烦以及SMO非常古老的API风格,让您的应用只使用TSQL和System.Data.SqlClient执行SQL Server管理通常会更好

答案 1 :(得分:1)

[解决]

Dumbassary正在进行中。

我删除了Visual Studio项目中的所有引用,重新添加它们并且它有效。

问题是由DLL引用引起的,该引用指向程序的安装目录而不是C:\ Program Files(x86)\ Microsoft SQL Server \ 130 \ SDK \ Assemblies。由于“属性”框未完全展开,我没有注意到它。

希望其他人可以从我的经验中受益。

感谢大卫的评论。