引用Microsoft.SqlServer.Smo的应用程序需要在Target Machine上包含其他程序集吗?

时间:2008-09-16 20:52:14

标签: .net reference

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

我的应用程序最初引用了Microsoft.SqlServer.Smo和Microsoft.SqlServer.ConnectionInfo。事情在我的开发盒上按预期工作。

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

我最终通过引用以下程序集解决了这个问题:

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

任何人都可以确认我确实需要在我的应用程序中包含这些附加程序集(并因此将它们安装在用户的计算机上),即使应用程序在我的开发盒上构建正常而没有引用它们吗?

4 个答案:

答案 0 :(得分:4)

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

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

2)SharedManagementObjects.msi

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

由于JIT在运行时链接到外部程序集,因此如果不分析代码并查看您调用的内容以及这些调用调用的内容等,则无法回答此问题。

如果你想自己分析一下,最好的办法就是只参考你需要的装配,然后从异常和内部例外中学习。

您应该考虑的另一件事是您提到的四个程序集不在GAC中的原因。看起来确实应该如此。

答案 3 :(得分:0)

对我来说,这个答案结果并非如此。我添加了上面的参考文献,但没有解决方案。最终我发现我只需要参考:

Microsoft.SqlServer.Smo

......以及以下决议:

I get a "An attempt was made to load a program with an incorrect format" error on a SQL Server replication project

总结一下,我需要启用IIS 6以在IIS App池上启用32位应用程序。这是因为我有Win 7 x64但是安装了SQL x86。太糟糕的错误信息不能更具体了吗?