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. 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?
Respuestas:
.NET 4.0 permite que los ensamblados de interoperabilidad primarios (o más bien, los bits que necesita) se incrusten en su ensamblaje para que no necesite implementarlos junto con su aplicación.
Por alguna razón, este ensamblaje no se puede incrustar, pero parece que no es un problema para usted. Simplemente abra la pestaña Propiedades para el ensamblaje en Visual Studio 2010 y establezca "Incrustar tipos de interoperabilidad" en "Falso".
EDITAR: Vea también la respuesta de Michael Gustus , eliminando el
Class
sufijo de los tipos que está utilizando.fuente
embed interop types
propiedad mencionada anteriormentefalse
hizo el truco. En mi caso, estaba trabajando con laMicrosoft.Office.Interop.Excel
biblioteca y necesitaba acceder al objeto Workbook. Usar su interfazWorkbook
(por cierto, convención de nomenclatura ...) no era una opción. RecibíCOM object
, no el deseadoMicrosoft.Office.Interop.Excel.WorkbookClass
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 código que inicia Excel:
Por lo general, en .NET 4 solo necesita eliminar el sufijo 'Clase' y compilar el código:
Una explicación de MSDN está aquí .
fuente
Como Jan Me tomó un tiempo entenderlo ... = S Entonces, para cualquier otra persona cegada por la frustración.
fuente
Aquí es donde configurar la interoperabilidad de inserción en Visual Studio 2012
fuente
Ampliando la respuesta correcta de Jon.
El problema aquí es que está combinando la nueva función "Tipos de interoperabilidad de incrustación" (o NoPIA) con el uso de un tipo de clase. La función "Insertar tipos de interoperabilidad" funciona esencialmente vinculando estáticamente todos los tipos de un PIA (ensamblado de interoperabilidad primario) en el ensamblaje de referencia eliminando la sobrecarga de desplegarlo.
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 servicio). Misha tiene un artículo de blog detallado sobre por qué esto no está permitido
fuente
Tengo la solución
Vaya a 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".
fuente
Me encontré con este problema al desplegar un proyecto TFS en mi máquina local. Supuestamente, estaba funcionando bien en la máquina del tipo que lo escribió. Simplemente cambié esto ...
A esto...
¡Ahora funciona como un campeón!
fuente
Tuve el mismo problema en VB.NET 2013 con Office 2007, y esto lo resolvió:
Proyecto VS 2013 VB.NET> Props> Refs> Microsoft Word 12.0 Object Lib> Tipos de interoperabilidad de incrustación: cambie True a False
fuente
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
Este error se produce porque el valor predeterminado es verdadero para la propiedad Tipos de interoperabilidad de incrustación del ensamblaje de interoperabilidad API 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 TestStand Interop Assembly en la sección de referencias de su proyecto en el Explorador de soluciones. Busque la propiedad Tipos de interoperabilidad de incrustación en el Explorador de propiedades y cambie el valor a Falso
fuente
Visual Studio 2017 versión 15.8 hizo posible utilizar la sintaxis PackageReferences para hacer referencia a paquetes NuGet en proyectos de Visual Studio Extensibility (VSIX). Esto hace que sea mucho más simple razonar sobre los paquetes NuGet y abre la puerta para tener un metapaquete completo que contenga todo el VSSDK.
La instalación a continuación del paquete NuGet resolverá el problema EmbedInteropTypes .
fuente