我正在用c#在。net 4.0框架(beta2)上创建一个web应用程序。

当我尝试使用一个名为“ActiveHomeScriptLib”的程序集时,我得到以下错误:

互操作类型 “ActiveHomeScriptLib。ActiveHomeClass” 不能嵌入。使用适用的 接口。

当我将框架更改到3.5版本时,我没有任何错误。

什么是互操作类型,为什么这只发生在我使用4.0框架时?


当前回答

我在VB中也遇到了同样的问题。NET 2013与Office 2007,这解决了它:

Vs 2013 vb。NET项目>道具>引用> Microsoft Word 12.0对象库>嵌入互操作类型:将True更改为False

其他回答

在大多数情况下,此错误是试图实例化COM对象的代码的结果。例如,下面是一段启动Excel的代码:

Excel.ApplicationClass xlapp = new Excel.ApplicationClass();

通常,在。net 4中,你只需要删除'Class'后缀并编译代码:

Excel.Application xlapp = new Excel.Application();

MSDN的解释在这里。

我在将TFS项目下拉到本地机器时遇到了这个问题。据说,它在编写它的人的机器上运行得很好。我只是简单地改变了这个…

WshShellClass shellClass = new WshShellClass();

这……

WshShell shellClass = new WshShell();

现在,它像冠军一样工作!

下面是在Visual Studio 2012中设置嵌入互操作的地方

扩展Jon的正确答案。

这里的问题是您将新的“嵌入互操作类型”(或NoPIA)特性与类类型的使用结合在一起。“嵌入互操作类型”特性的工作原理基本上是静态地将PIA(主互操作程序集)中的所有类型链接到引用程序集,从而消除了部署它的开销。

这个特性对于PIA中的大多数类型都非常有效,但它也有一些限制。其中之一是您不能嵌入类(这是一个服务问题)。Misha有一篇关于为什么不允许这样做的详细博客文章

http://blogs.msdn.com/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead.aspx

找到解决方案了

转到引用,右键单击所需的dll,您将获得选项“嵌入互操作类型”为“False”或“True”。