协慌网

登录 贡献 社区

互操作类型无法嵌入

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

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

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

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

什么是互操作类型?为什么仅在使用 4.0 框架时才会发生这种情况?

答案

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

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

编辑:另请参阅 Michael Gustus 的答案,从您使用的类型中Class

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

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

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

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

MSDN 的解释在这里

像 Jan 一样,我花了一段时间才得到它。

  • 右键单击在 “项目引用”下的解决方案资源管理器中添加的有问题的程序集。 (以我为例)
  • 单击属性。
  • 而且应该有嵌入式 Interop 组件的选项。
  • 将其设置为 False