繁体   English   中英

无法嵌入互操作类型

[英]Interop type cannot be embedded

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

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

无法嵌入互操作类型“ActiveHomeScriptLib.ActiveHomeClass”。 请改用适用的接口。

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

什么是互操作类型,为什么只有在我使用 4.0 框架时才会出现这种情况?

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

无论出于何种原因,无法嵌入此程序集 - 但听起来这对您来说不是问题。 只需在 Visual Studio 2010 中打开程序集的“属性”选项卡,并将“嵌入互操作类型”设置为“假”。

编辑:另请参阅 Michael Gustus 的回答,从您使用的类型中删除Class后缀。

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

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

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

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

MSDN 解释是here

像 Jan 我花了一段时间才得到它.. =S 所以对于那些被挫折蒙蔽的人来说。

  • 右键单击您在项目References下的解决方案资源管理器中添加的违规程序集。 (就我而言,WIA)
  • 单击属性。
  • 那里应该有Embed Interop Assembly的选项
  • 将其设置为 False

这是在 Visual Studio 2012 中设置嵌入互操作的位置

在此处输入图片说明

扩展乔恩的正确答案。

这里的问题是您将新的“嵌入互操作类型”(或 NoPIA)功能与类类型的使用相结合。 “嵌入互操作类型”功能的工作原理是将所有类型从 PIA(主互操作程序集)静态链接到引用程序集,从而消除部署它的开销。

此功能适用于 PIA 中的大多数类型,但它确实有限制。 其中之一是您不能嵌入类(这是一个服务问题)。 Misha 有一篇详细的博客文章,说明为什么不允许这样做

得到了解决方案

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

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

WshShellClass shellClass = new WshShellClass();

对此...

WshShell shellClass = new WshShell();

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

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

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

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

发生此错误的原因是新项目中引用的 TestStand API Interop 程序集的 Embed Interop Types 属性的默认值为 true。 要解决此错误,请按照以下步骤将 Embed Interop Types 属性的值更改为 False: 在解决方案资源管理器中项目的引用部分中选择 TestStand Interop Assembly 引用。 在属性浏览器中找到 Embed Interop Types 属性,并将值更改为 False

Visual Studio 2017 版本 15.8 使得可以使用 PackageReferencesyntax来引用 Visual Studio 扩展性 (VSIX) 项目中的 NuGet 包。 这使得推理 NuGet 包变得更加简单,并为拥有包含整个 VSSDK 的完整元包打开了大门。

在 NuGet 包下安装将解决EmbedInteropTypes问题。

安装包 Microsoft.VisualStudio.SDK.EmbedInteropTypes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM