我使用 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 版本构建项目。
请注意,由于加载和部署 SMO 很麻烦,而且 SMO 确实很旧的 API 风格,因此通常最好让您的应用仅使用 TSQL 和 System.Data.SqlClient 执行 SQL Server 管理。
关于c# - 如何解决此 SQL/C# DLL 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45196901/