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

标签 c# sql-server dll server connection

我使用 C# (Visual Studio) 开发了一个应用程序,该应用程序在我的 Windows 10 开发电脑上运行没有问题。但是,当我将应用程序复制到其预期目标 PC 并运行它 (Server 2012 R2) 时,我收到一个异常,通知我无法加载文件或程序集:Microsoft.SqlServer.ConnectionInfo,版本=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

全部设置为:特定版本= false。

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

• ColdFusion

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

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

对目录具有完全权限,程序本身具有最高访问级别。

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

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

提前感谢大家。

问候, 肯。

其他信息

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

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

最佳答案

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

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

查看 https://learn.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/files-and-version-numbers

请注意,由于加载和部署 SMO 很麻烦,而且 SMO 确实很旧的 API 风格,因此通常最好让您的应用仅使用 TSQL 和 System.Data.SqlClient 执行 SQL Server 管理。

关于c# - 如何解决此 SQL/C# DLL 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45196901/

相关文章:

c# - Pentago AI算法如何实现

c# - 这两个 LINQ 查询有什么区别?

c# - 与具有相同名称和不同返回类型的成员接口(interface)

mysql - 为什么我可以使用 SCHEMABINDING 修改 View 引用的表?

.net - 如何检查DLL文件针对的.NET Framework版本?

c# - 在静态方法中访问 WPF Name 属性

mysql - 如何替换特定字符串的前后字符

c# - 使用 Web API, Entity Framework 如何知道对象中发生了什么变化?

c# - 无法将 Visual Studio 制作的 C++ DLL 导入 Windows 上的 Visual Studio C# 项目

c# - 制作C#工程DLL和EXE