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

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

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

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

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


当前回答

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

其他回答

我花了一段时间才学会。对于那些被挫折蒙蔽了双眼的人来说。

右键单击您在项目引用下的解决方案资源管理器中添加的出错程序集。(以我为例,WIA) 单击“属性”。 这里应该有嵌入互操作组装的选项。 设置为False

. net 4.0允许将主要的互操作程序集(或者更确切地说,您需要的部分)嵌入到程序集中,这样您就不需要将它们与应用程序一起部署。

不管出于什么原因,这个程序集不能嵌入-但听起来这对您来说不是问题。只需在Visual Studio 2010中打开程序集的Properties选项卡,并将“Embed Interop Types”设置为“False”。

编辑:另见Michael Gustus的回答,从你正在使用的类型中删除Class后缀。

找到解决方案了

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

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

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

WshShellClass shellClass = new WshShellClass();

这……

WshShell shellClass = new WshShell();

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