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