Pregunta El tipo de interoperabilidad no se puede incrustar


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

Cuando intento usar un ensamblado llamado "ActiveHomeScriptLib", aparece el siguiente error:

Tipo de interoperabilidad   'ActiveHomeScriptLib.ActiveHomeClass'   no puede ser incrustado Use el aplicable   interfaz 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?


580
2018-03-20 15:47


origen


Respuestas:


.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: Ver también Michael Gustus responder, la eliminación de la Class sufijo de los tipos que estás usando.


935
2018-03-20 15:54



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 compilar el código:

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

Una explicación de MSDN es aquí.


437
2017-12-29 10:47



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 su proyecto Referencias. (En mi caso WIA)
  • Haga clic en propiedades.
  • Y debería haber la opción allí para Incrustar conjunto de interoperabilidad.
  • Establecerlo en False

101
2017-07-23 16:31



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


31
2018-03-20 17:42



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

enter image description here


22
2017-10-24 15:45



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".


12
2017-07-11 14:37



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!


8
2018-01-12 15:34



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


2
2017-10-04 14:23



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 False siguiendo estos pasos: Seleccione la referencia de TestStand Interop Assembly 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


1
2018-06-10 07:57