El tipo de interoperabilidad no se puede incrustar

Estoy creando una aplicación web en .NET 4.0 framework (beta2) en C #.

Cuando bash usar un ensamblado llamado “ActiveHomeScriptLib”, aparece el siguiente error:

El tipo de interoperabilidad ‘ActiveHomeScriptLib.ActiveHomeClass’ no se puede incrustar. Use la interfaz aplicable en su lugar.

Cuando cambio el marco a la versión 3.5, no tengo ningún error.

¿Qué es un tipo de interoperabilidad y por qué esto solo ocurre cuando uso el marco 4.0?

.NET 4.0 permite que los ensamblados de interoperabilidad primarios (o más bien, los bits que se necesitan) se incrustan en su ensamblaje para que no tenga que implementarlos junto con su aplicación.

Por alguna razón, este ensamblaje no puede integrarse, pero parece que no es un problema para usted. Simplemente abra la pestaña Propiedades para el ensamblaje en Visual Studio 2010 y configure “Insertar tipos de interoperabilidad” en “Falso”.

EDITAR: Consulte también la respuesta de Michael Gustus, eliminando el sufijo de Class de los tipos que está utilizando.

En la mayoría de los casos, este error es el resultado de un código que intenta crear una instancia de un objeto COM. Por ejemplo, aquí hay una pieza de código que inicia Excel:

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

Normalmente, en .NET 4 solo necesita eliminar el sufijo ‘Clase’ y comstackr el código:

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

Una explicación de MSDN está aquí .

Como Jan Me tomó un tiempo conseguirlo … = S Así que para cualquier otra persona que esté cegada por la frustración.

  • Haga clic con el botón derecho en el ensamblaje ofensivo que agregó en el explorador de soluciones en las referencias de su proyecto. (En mi caso WIA)
  • Haga clic en propiedades.
  • Y debería haber una opción allí para ensamblar la interoperabilidad.
  • Establecerlo en False

Ampliando la respuesta correcta de Jon.

El problema aquí es que estás combinando la nueva característica “Insertar tipos de interoperabilidad” (o NoPIA) con el uso de un tipo de clase. La función “Incrustar tipos de interoperabilidad” funciona esencialmente enlazando estáticamente en todos los tipos desde un PIA (conjunto de interoperabilidad primario) al conjunto de referencia, eliminando la sobrecarga de su implementación.

Esta característica funciona muy bien para la mayoría de los tipos en un PIA, pero tiene restricciones. Una de ellas es que no puede incrustar clases (es un problema de mantenimiento). Misha tiene un artículo de blog detallado sobre por qué esto no está permitido

Aquí es donde configurar la Interoperación de inserción en Visual Studio 2012

enter image description here

Tengo la solución

Vaya a las referencias, haga clic derecho en el dll deseado y obtendrá la opción “Incrustar tipos de interoperabilidad” en “Falso” o “Verdadero”.

Me encontré con este problema cuando tiraba de un proyecto TFS a mi máquina local. Supuestamente, estaba funcionando bien en la máquina del tipo que lo escribió. Simplemente cambié esto …

 WshShellClass shellClass = new WshShellClass(); 

A esto…

 WshShell shellClass = new WshShell(); 

¡Ahora está funcionando como un campeón!

Tuve el mismo problema en VB.NET 2013 con Office 2007, y esto lo resolvió:

VS 2013 VB.NET Project> Props> Refs> Microsoft Word 12.0 Object Lib> Insertar tipos de interoperabilidad: cambiar de verdadero a falso

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

Este error se produce porque el valor predeterminado es verdadero para la propiedad Insertar tipos de interoperabilidad del ensamblado Interoperabilidad API TestStand al que se hace referencia en el nuevo proyecto. Para resolver este error, cambie el valor de la propiedad Insertar tipos de interoperabilidad a Falso siguiendo estos pasos: Seleccione la referencia Montaje de interpolación TestStand en la sección de referencias de su proyecto en el Explorador de soluciones. Busque la propiedad Insertar tipos de interoperabilidad en el Explorador de propiedades y cambie el valor a Falso