我有一个小应用程序,它引用了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

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

===============>>#1 票数:4

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

1)SQLSysClrTypes.msi [C#-> SMO GAC需要此)

2)SharedManagementObjects.msi

对于SQL Server 2014,您可以在此处下载它们。

另外,您必须确保版本正确。 稍加搜索即可找到这两个文件。 这样,您就不会将任何内容复制到本地,并且GAC会解决这些问题。

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

===============>>#2 票数:2 已采纳

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

===============>>#3 票数:0

对我来说,这个答案不正确。 我添加了以上引用,但没有解决方法。 最终,我发现我只需要参考:

Microsoft.SqlServer.Smo

...以及以下解决方案:

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

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

===============>>#4 票数:0

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

如果您想自己进行分析,最好的选择是仅引用所需的程序集,然后从异常和内部异常中了解发生了什么。

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

  ask by Tim Lentine translate from so

未解决问题?本站智能推荐:

1回复

如何引用2个不同的SQLServer程序集从.net(4.5)调用SSIS

我有一个Web应用程序,该应用程序调用2008年构建的SSIS软件包。当我们迁移到VS2013和SQL2014时,我已经开始使用2013年升级我的SSIS软件包。 我看到这篇文章 (我没有足够的代表对此发表评论)谈论了多个程序集引用,但是我不确定代码在哪里,因为我的Web.config文件
2回复

从本地安装的应用程序引用远程安装的程序集(Web uri)?

我们有一个用于Windows的.NET应用程序,由Microsoft Installer在本地安装。 现在,我们需要使用位于Web服务器在线的其他程序集。 我们想引用一个远程uri,例如https://www.ourserver.com/OurProductName/ExternalLib.
2回复

为什么引用的程序集被锁定?

我有2个程序集。 Assembly1引用了Assembly2。 为什么Assembly2被锁定? 我以为整个程序集都是由JIT编译器加载到RAM中的,不是吗? 调用引用的程序集时机械性如何工作?
1回复

其他程序集引用的方法

我正在开发影响分析工具。 如果我在myAssembly中更改方法说“myMethod”,我需要让所有其他程序集引用myAssembly,我通过下面的代码得到它。 但是,我怎么知道“myAssembly”的“myMethod”是否被调用/使用? 否则我会得到所有引用myAssembly
1回复

Visual Studio 2017 Professional-引用无法解析(在某些计算机上)

它始于一名开发人员,需要解决一些版本控制问题。 他现在将标准定义中的一些System.xxx引用更改为指向“ packages”文件夹。 我们使用FW 4.7.1,这是Web Api项目。 <Reference Include="System.Runtime"> <H
3回复

是否可以用“弱”引用替换对具有强名称的程序集的引用?

我正在编写一个需要SQL Server SMO库的.NET工具。 我不在乎它是Server 2005(9.0),2008(10.0)还是2008 R2(可能是10.5,没有检查)的版本。 SMO库与SQL Server一起安装,因此我可以放心地假设在安装了SQL Server的任何系统上,也
1回复

项目引用均引用不同的程序集版本

我有一个类库项目引用了版本4.1 Microsoft.Practices.Common dll。 我还引用了利用Microsoft.Practices.Common DLL的不同版本的第三方DLL。 我创建了一个引用这两个DLL的Windows应用程序。 运行MSBUILD时收到错
1回复

如何以编程方式添加程序集引用

这是我的场景:我们计划自动化deltabuild过程,这意味着我需要创建一个工具来促进这个deltabuild过程。 我需要做的是只编译那些有变化的文件。 我如何以编程方式添加程序集引用以引用其他dll,所以我不需要编译其他dll的? 任何帮助,将不胜感激。
1回复

引发异常而不引用其宿主程序集?

我有一个程序集,它是系统A的插件(它实现IASystemPlugin接口)。 系统A是系统B的组件。我想从插件向系统B级别抛出异常。 不幸的是,系统A和B都处理所有已知异常,然后重新抛出所有未知异常,因此我必须抛出B.SystemBException实例。 作为系统A客户端,我没有对B
2回复

维护“干净”的程序集引用列表有什么好处?

就像卡尔在这里的问题一样,我想问你(因为我自己找不到它:()如果通过删除非静态或动态(例如通过反射)的汇编引用有任何好处。