.net 引用Microsoft.SqlServer.Smo的应用程序是否需要在目标计算机上包括其他程序集?

.net 引用Microsoft.SqlServer.Smo的应用程序是否需要在目标计算机上包括其他程序集?,.net,reference,.net,Reference,我有一个引用Microsoft.SqlServer.Smo程序集的小应用程序(因此我可以向用户显示他们可以连接的服务器和数据库的列表) 我的应用程序最初引用了Microsoft.SqlServer.Smo和Microsoft.SqlServer.ConnectionInfo。在我的dev box上,一切正常 当我在测试机器上安装应用程序时,我收到一个System.IO.FileNotFoundException。该消息的详细信息包括: 无法加载文件或程序集Microsoft.SqlServer.

我有一个引用Microsoft.SqlServer.Smo程序集的小应用程序(因此我可以向用户显示他们可以连接的服务器和数据库的列表)

我的应用程序最初引用了Microsoft.SqlServer.Smo和Microsoft.SqlServer.ConnectionInfo。在我的dev box上,一切正常

当我在测试机器上安装应用程序时,我收到一个System.IO.FileNotFoundException。该消息的详细信息包括: 无法加载文件或程序集Microsoft.SqlServer.SmoEnum

除上述组件外,我最终通过参考以下组件解决了该问题:

  • Microsoft.SqlServer.SmoEnum
  • Microsoft.SqlServer.SqlEnum
  • Microsoft.SqlServer.BatchParser
  • Microsoft.SqlServer.Replication

有人能确认我确实需要在我的应用程序中包含这些附加程序集(并因此将它们安装在用户的机器上),即使应用程序在我的开发框中构建得很好,但没有引用它们吗?

因为JIT在运行时链接到外部程序集,如果不分析您的代码,看看您调用了什么,以及这些调用又调用了什么,等等,就无法回答这个问题

如果您想自己分析这个问题,最好只引用您需要的程序集,然后从异常和内部异常中学习发生了什么


另一件你应该调查的事情是为什么你提到的四个组件不在GAC中。看起来它们确实应该包括在内。

是的,它们确实需要包括在内。在开发计算机上,您可能安装了SQL Server,它将这些程序集放入全局程序集缓存中。无论何时构建,VisualStudio都会从GAC中提取它们。它还假设无论部署在哪台计算机上,GAC都将拥有这些文件。如果没有,则抛出FileNotFound异常。

对我来说,这个答案不是真的。我添加了上述参考,但没有解决方案。最终我发现我只需要参考:

Microsoft.SqlServer.Smo

。。。并通过以下决议:


总之,我需要在IIS应用程序池上启用IIS 6以启用32位应用程序。这是因为我赢得了7 x64,但安装了SQL x86。太糟糕了,错误消息太具体了,嗯?

您需要在目标计算机上安装两个MSI文件,即:

1) SQLSysClrTypes.msi[这是C#->SMO GAC所需要的]

2) SharedManagementObjects.msi

对于SQL Server 2014,您可以下载这些

此外,您必须确保版本正确。这两个文件可以通过谷歌搜索找到。这样,您就不会将任何内容复制到本地&它们将由GAC解决


我知道这是个老问题,但答案并不令人满意

谢谢你的提问,我从中学到了很多!要跟进。。。当部署到我的测试Web服务器时,我遇到了上面的错误。我很困惑,于是在GAC中查找,找到了上面提到的所有DLL。然而,在我的web应用程序的bin目录中,我注意到我只有:Microsoft.SqlServer.BatchParser Microsoft.SqlServer.Replication。。。所以我移除了它们,一切都正常了。我相信我的部分依赖文件集导致.net将我的部分文件集加载到bin中,而不是从GAC加载。因此,最好的做法似乎是不部署这些互操作。