[c#] El tipo de interoperabilidad no se puede incrustar


3 Answers

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 está here .

Question

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:

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?




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




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




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




Related