Interoptypes不能embedded

我正在C#中的.NET 4.0框架(beta2)上创build一个Web应用程序。

当我尝试使用名为“ActiveHomeScriptLib”的程序集时,出现以下错误:

互操作types“ActiveHomeScriptLib.ActiveHomeClass”不能embedded。 改用适用的界面。

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

什么是Interoptypes,为什么只有在使用4.0框架时才会发生?

.NET 4.0允许将主要的互操作程序集(或者说需要的部分)embedded到程序集中,这样就不需要将它们部署到应用程序中。

无论出于何种原因,这个大会不能被embedded – 但这听起来对你来说不是问题。 只需在Visual Studio 2010中打开程序集的“属性”选项卡,并将“embeddedInteroptypes”设置为“False”。

编辑:另请参见迈克尔Gustus的答案 ,从您正在使用的types中删除Class后缀。

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

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

通常,在.NET 4中,只需要删除“Class”后缀并编译代码:

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

MSDN的解释是在这里 。

像Jan一样,我花了一段时间才得到它。= S所以对于任何一个蒙蔽沮丧的人来说。

  • 右键单击您在项目引用下的解决scheme资源pipe理器中添加的问题程序集。 (在我的情况下WIA)
  • 点击属性。
  • 那里应该有embedded互操作程序集的选项
  • 将其设置为False

扩大Jon的正确答案。

这里的问题是你正在将新的“embedded互操作types”(或NoPIA)function与类types结合使用。 “embedded互操作types”function的工作原理是将PIA(主互操作程序集)中的所有types静态链接到引用程序集,从而消除了部署它的开销。

这个function对PIA中的大多数types都很有用,但是它有一定的限制。 其中之一是你不能embedded类(这是一个服务问题)。 米沙有一个详细的博客文章,为什么这是不被允许的

这里是在Visual Studio 2012中设置Embed Interop的地方

在这里输入图像描述

得到了解决scheme

转到引用右键单击所需的DLL你会得到选项“embedded互操作types”为“假”或“真”。

当我把TFS项目下拉到本地机器时遇到了这个问题。 据说,在写这个人的机器上工作的很好。 我只是改变了这个…

 WshShellClass shellClass = new WshShellClass(); 

对此…

 WshShell shellClass = new WshShell(); 

现在,它就像一个冠军!

我在使用Office 2007的VB.NET 2013中遇到了同样的问题,解决了这个问题:

VS 2013 VB.NET项目>道具>参考> Microsoft Word 12.0对象库>embedded互操作types:将True更改为False

http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307

出现此错误的原因是新项目中引用的TestStand API互操作程序集的embedded互操作types属性的默认值为true。 要解决此错误,请按照以下步骤将Embed Interop Types属性的值更改为False:在解决scheme资源pipe理器的项目的引用部分中selectTestStand Interop程序集引用。 在属性浏览器中findEmbed Interop Types属性,并将其值更改为False