c# tag - El tipo de interoperabilidad no se puede incrustar




propiedad (9)

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

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

El tipo de interoperabilidad 'ActiveHomeScriptLib.ActiveHomeClass' no se puede incrustar. Utilice 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?


Answers

Tengo la solucion

Vaya a las referencias, haga clic con el botón derecho en la dll deseada y obtendrá la opción "Incrustar tipos de interoperabilidad" en "Falso" o "Verdadero".


Me encontré con este problema al bajar un proyecto TFS a mi máquina local. Al parecer, 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!


Al igual que a 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 conjunto infractor 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 la opción allí para Incrustar Interop Assembly.
  • Ponlo en Falso

.NET 4.0 permite que los ensamblajes de interoperabilidad primarios (o, mejor dicho, los bits que necesita) estén incrustados en su ensamblaje para que no necesite desplegarlos junto con su aplicación.

Por el motivo que sea, este ensamblaje no se puede incrustar, pero parece que no es un problema para usted. Simplemente abra la pestaña Propiedades del ensamblaje en Visual Studio 2010 y configure "Incrustar tipos de interoperabilidad" en "Falso".

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


Ampliando la respuesta correcta de Jon.

El problema aquí es que está combinando la nueva característica "Incrustar tipos de interoperabilidad" (o NoPIA) con el uso de un tipo de clase. La función "Incrustar tipos de interoperabilidad" funciona esencialmente mediante la vinculación estática de todos los tipos, desde un PIA (ensamblaje primario de interoperabilidad) al ensamblaje de referencia, lo que elimina 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 detallado en el blog sobre por qué esto no está permitido


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

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

Normalmente, en .NET 4 solo necesitas eliminar el sufijo 'Clase' y compilar el código:

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

Una explicación de MSDN está here .


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

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


Aquí es donde se establece la interoperabilidad de incrustación en Visual Studio 2012


Volver a seleccionar el archivo de clave en un cuadro combinado e ingresar la contraseña nos ayuda.

Pero es necesario hacerlo cada vez que cambia el archivo clave y parece que no está bien.





c# visual-studio-2010 visual-studio c#-4.0