代码之家  ›  专栏  ›  技术社区  ›  Tim Lentine

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

  •  5
  • Tim Lentine  · 技术社区  · 16 年前

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

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

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

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

    4 回复  |  直到 16 年前
        1
  •  4
  •   btlog Stefan Wick MSFT    10 年前

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

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

    2) SharedManagementObjects.msi

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

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

        2
  •  2
  •   volley    16 年前

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

        3
  •  0
  •   Omer van Kloeten    16 年前

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

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

        4
  •  0
  •   Community CDub    8 年前

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

    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应用程序池上启用IIS 6以启用32位应用程序。这是因为我赢得了7 x64,但安装了SQL x86。太糟糕了,错误信息不能更具体了,是吗?