我使用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,即:
所有设置为:特定版本=假。
所有必要的框架都安装在服务器上。此外,服务器上还安装了以下内容,程序与之交互:
•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。
答案 0 :(得分:2)
SMO始终安装在GAC中,因此将您复制到/ bin文件夹的文件并不重要。 GAC' d程序集覆盖了本地程序集。
您已引用SMO的SQL 2016版本。因此,您必须在目标服务器上安装它,或者根据目标服务器上已存在的SMO版本构建项目。
请注意,由于加载和部署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。由于“属性”框未完全展开,我没有注意到它。
希望其他人可以从我的经验中受益。
感谢大卫的评论。