2017-07-19 51 views
1

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

如果我将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

所有设置如:特定版本= false。

所有必要的框架都安装在服务器上。此外,以下也安装在服务器上,该节目与互动上:

•ColdFusion的

•SQL服务器2012(和2008年,但这种情况下不被程序使用)

的。 exe通过安装程序安装,并且该安装包含必要的dll,它们与exe安装在相同的目录中。

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

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

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

感谢大家提前。

Regards, Ken。 Microsoft.SqlServer.ConnectionInfo.dll的Visual Studio中所示

附加信息

版本号是13.100.0.0。我将属性中显示的路径中的DLL复制到程序目录中。你猜怎么了?当我运行程序时,一个异常告诉我它找不到版本14.100.0.0!

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

回答

1

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管理。

0

[已解决]

Dumbassary正在进行。

我删除了Visual Studio项目中的所有引用,重新添加它们并使其工作。

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

希望别人能从我的经验中受益。

感谢您的评论David。