5

我有一个引用 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

4 回答 4

4

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

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

2) SharedManagementObjects.msi

对于 SQL Server 2014,您可以在此处下载这些内容。

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

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

于 2014-05-13T14:29:25.177 回答
2

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

于 2008-09-16T21:34:15.230 回答
0

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

如果你想自己分析这个,最好的办法是只引用你需要的程序集,然后从异常和内部异常中了解发生了什么。

您应该研究的另一件事是为什么您提到的四个程序集不在 GAC 中。看起来他们应该是。

于 2008-09-16T21:31:18.590 回答
0

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

微软.SqlServer.Smo

...以及以下决议:

我在 SQL Server 复制项目上收到“尝试加载格式不正确的程序”错误

总而言之,我需要启用我的 IIS 6 以在 IIS 应用程序池上启用 32 位应用程序。这是因为我安装了 Win 7 x64 但安装了 SQL x86。太糟糕了,错误消息不能更具体吧?

于 2011-04-27T17:58:26.017 回答