En Visual Studio, al agregar una referencia al proyecto, la ventana de propiedades tiene una opción Embed Inteop Types
, ¿deberíamos establecerla en True
o False
? ¿Cual es la diferencia?
Como tenemos muchos proyectos, entre algunos de ellos, se estableció una referencia False
, otros se establecieron True
, es un desastre total. Y el servidor bulid también tiene las mismas advertencias:
¿Qué significa “se creó una referencia a un ensamblado de interoperabilidad integrado”?
Así que planeamos cambiar todo el Embed Inteop Types
a False
, ¿qué riesgo correríamos?
c#
visual-studio
Jerry Bian
fuente
fuente
false
o nunca los cambie (por ejemplo, si ya están predeterminadosfalse
)?Respuestas:
Esta opción se introdujo para eliminar la necesidad de implementar PIA (ensamblados de interoperabilidad primarios) muy grandes para la interoperabilidad.
Simplemente incrusta el código de puente administrado utilizado que le permite hablar con ensamblados no administrados, pero en lugar de incrustarlo todo, solo crea las cosas que realmente usa en el código.
Lea más en la publicación del blog de Scott Hanselman sobre esto y otras mejoras de VS aquí .
En cuanto a si se recomienda o no, no estoy seguro, ya que no necesito usar esta función. Una búsqueda rápida en la web arroja algunas pistas:
El único riesgo de convertirlos a todos en falsos es más preocupaciones de implementación con archivos PIA y una implementación más grande si algunos de esos archivos son grandes.
fuente
Me di cuenta de que cuando se establece en falso, puedo ver el valor de un elemento usando el depurador. Cuando se estableció en verdadero, recibí un error: item.FullName.GetValue El tipo de interoperabilidad incrustado 'FullName' no contiene una definición para 'QBFC11Lib.IItemInventoryRet' ya que no se usó en el ensamblado compilado. Considere la posibilidad de convertir a un objeto o cambiar la propiedad 'Incrustar tipos de interoperabilidad' a true.
fuente