我正在用c#在。net 4.0框架(beta2)上创建一个web应用程序。
当我尝试使用一个名为“ActiveHomeScriptLib”的程序集时,我得到以下错误:
互操作类型 “ActiveHomeScriptLib。ActiveHomeClass” 不能嵌入。使用适用的 接口。
当我将框架更改到3.5版本时,我没有任何错误。
什么是互操作类型,为什么这只发生在我使用4.0框架时?
我正在用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();
现在,它像冠军一样工作!
我在VB中也遇到了同样的问题。NET 2013与Office 2007,这解决了它:
Vs 2013 vb。NET项目>道具>引用> Microsoft Word 12.0对象库>嵌入互操作类型:将True更改为False
. net 4.0允许将主要的互操作程序集(或者更确切地说,您需要的部分)嵌入到程序集中,这样您就不需要将它们与应用程序一起部署。
不管出于什么原因,这个程序集不能嵌入-但听起来这对您来说不是问题。只需在Visual Studio 2010中打开程序集的Properties选项卡,并将“Embed Interop Types”设置为“False”。
编辑:另见Michael Gustus的回答,从你正在使用的类型中删除Class后缀。
Visual Studio 2017 version 15.8允许在Visual Studio Extensibility (VSIX)项目中使用PackageReferencesyntax来引用NuGet包。这使得推断NuGet包变得更加简单,并为拥有一个包含整个VSSDK的完整元包打开了大门。
安装下面的NuGet包将解决EmbedInteropTypes问题。
安装包Microsoft.VisualStudio.SDK.EmbedInteropTypes