c# com stdole

c# - ¿Qué hace stdole.dll?



com (5)

Parece que stdole.dll es un ensamblado de interoperabilidad primario . Consulte los ensamblados de interoperabilidad primaria de Office 2003 en MSDN.

Tenemos una gran aplicación C # (.net 2.0) que utiliza nuestro propio componente COM de C ++ y una biblioteca de escáner de huellas dactilares de terceros también accedida a través de COM. Nos encontramos con un problema en el que, en producción, algunos eventos de la biblioteca de huellas digitales no se activan en la aplicación C #, aunque los eventos de nuestro propio componente COM de C ++ se activaron y se recibieron correctamente.

Usando MSINFO32 para comparar los módulos cargados en un sistema en funcionamiento con los de un sistema defectuoso, determinamos que esto fue causado porque STDOLE.DLL no estaba en el GAC y, por lo tanto, no se cargó en el proceso defectuoso.

Arrastrar este archivo al GAC causó que los eventos regresaran bien desde la biblioteca COM de huellas dactilares.

Entonces, ¿qué hace stdole.dll? Tiene un tamaño de 16k, por lo que no puede ser mucho ... ¿es algún tipo de enlace a otra biblioteca como STDOLE32? ¿Cómo es que su ausencia causa un comportamiento tan extraño?

¿Cómo distribuimos stdole.dll? Esta es una aplicación de implementación de XCOPY y no usamos el GAC. ¿Deberíamos empaquetarlo como un recurso y usar System.EnterpriseServices.Internal.Publish.GacInstall para asegurarnos de que esté en el GAC?


También tuve que agregar una referencia a mi proyecto para stdole. Aunque no tengo ninguna referencia (es una aplicación de imagen simple), 2 de nuestros usuarios recibían errores que faltaban. Podría ser que solo ejecutaran .net 2.0 cuando se trata de una aplicación de 3.5. He descubierto por qué.

También ingresé para publicar en la pestaña de propiedades del proyecto y los Archivos de aplicación seleccionados, y luego incluí el stdole para implementar. Espero que eso funcione.


Yo tuve el mismo problema. Acabo de eliminar la referencia de la aplicación y recompilarla. Corrió todas las pruebas que pasaron. Luego se redistribuyó sin el dll y todo funcionó.

No sé cómo una referencia a esto se metió en el proyecto en primer lugar. Es una aplicación heredada, así que debe haber sido hace mucho tiempo.

Simon


En nuestro proyecto, IDispatch consulta usando stdole.dll. Lo hemos cambiado para objetar y eliminar IDispatch, luego eliminar stdole de las referencias.


Este problema también se trata aquí: ¿Por qué Visual Studio 2015 agrega stdole.dll y Microsoft.AnalysisServices.AdomdClient.dll a mi proyecto?

La actualización de un proyecto anterior a VS 2015 es lo que provocó que stdole.dll comenzara a incluirse en el proyecto en este caso.

Si la referencia de la biblioteca tiene la opción de "Insertar tipos de interoperabilidad" en las propiedades, esto es preferible y stdole.dll puede no ser necesario después de eso. Simplemente configure Embed Interop Types=true en las propiedades de la referencia.

Las bibliotecas que permiten esto incluyen las bibliotecas de MS Office como Office, Excel, Core. Un ejemplo de uno que no es Crystal Reports.

Hans Passant desaconseja encarecidamente la configuración de los Embed Interop Types=false aquí: ¿cuál es la configuración de diferencia incrustada Tipos de interoperabilidad verdadero y falso en Visual Studio?