Cuando se crea un nuevo proyecto de C# en Visual Studio, la generada AssemblyInfo.cs archivo incluye un atributo que especifica una asamblea GUID. El comentario sobre los estados de atributo que se utiliza «si este proyecto se expone a COM».

Ninguno de mis conjuntos contienen tipos que deben ser visibles para COM, por lo que he marcado en mi asamblea con [assembly: ComVisible(false)]. Así que es allí cualquier punto en la especificación de un GUID?

Mi sensación es que la respuesta es «no» – entonces, ¿por qué el valor predeterminado AssemblyInfo.cs archivo contiene tanto [assembly: ComVisible(false)] y [assembly: Guid("...")]?


Edición:

Para resumir las respuestas:

Entre ellos, las respuestas explicar que la especificación de un GUID es necesario si y sólo si interoperabilidad COM está siendo utilizado. Así que, en mi situación, un GUID no es necesario.

sharptooth explica, además, que [assembly: ComVisible(false)] no implica el no uso de la interoperabilidad COM, ya que es posible reemplazar ComVisible para los diferentes tipos. Es por esta razón que el defecto AssembyInfo.cs contiene [assembly: ComVisible(false)] y un GUID.

InformationsquelleAutor user200783 | 2010-02-27

3 Comentarios

  1. 16

    Tener [assembly: ComVisible(false)] y [assembly: Guid("...")] al mismo tiempo hace perfecto sentido en ciertos casos. Usted comienza con un vacío de la asamblea y será, tal vez, quiere exponer algo a la COM. Así que la marca de la asamblea como no ComVisible y después marcar las entidades a las que se exponen como ComVisible. Es por eso que el GUID existe por defecto.

    Independientemente, si usted realmente no desea exponer nada de su asamblea COM salir de la «Registrar para interoperabilidad COM» opción desactivada en la configuración del proyecto.

  2. 9

    Consistente Guid son absolutamente esenciales en la COM. El [assembly:Guid] atributo genera la biblioteca de tipo LIBID. Seguramente la plantilla de proyecto de auto-genera uno para asegurarse de que el programador no se olvide de proporcionar uno cuando se voltea ComVisible a la verdad.

    Si una asamblea [Guid] no se proporciona a continuación Tlbexp.exe sintetiza uno de la asamblea el nombre, la versión y la clave pública. Eso no es realmente lo suficientemente bueno, bibliotecas de tipos ya tiene una versión. Cambiar [AssemblyVersion] generaría una diferente LIBID. Mal, especialmente cuando se utiliza el incremento automático de la opción para la versión (como 1.0.*), usted puede llenar rápidamente el registro con una montaña de muertos de biblioteca de tipos de claves de registro.

    Cuento largo corto, evita un montón de desagradables contratiempos.

    • No olvide que usted puede establecer ComVisible a «false» en el nivel de conjunto y establece en «true» para las clases/interfaces/métodos dentro de la asamblea y el último reemplazará al primero. Consulte stackoverflow.com/questions/1649752/… de cómo puede ser utilizado. Así que a darle «on» en el ámbito de la asamblea no es necesario.
    • Tener una constante GUID único que realmente importa si su tipo de biblioteca debe ser expuesto a la COM los clientes que están esperando una interfaz en particular. Usted todavía puede exponer a los objetos COM a través de IDispatch sin una permanente GUID.
    • Hmm, a finales de unión requiere una constante de ProgID. Mismo problema.
  3. 4

    Nope, no hay ninguna razón real para que la incluya. Es bastante innecesaria, salvo en muy específico COM escenarios de interoperabilidad. Aunque supongo que podría haber algo útil el tener un GUID que se puede acceder con la reflexión. Pero ya que no está garantizado a estar allí, no es como si pudiera confiar en él.

    • Tiene una muy grande uso para un servidor web independiente que necesita un certificado SSL
    • No estamos seguros de que estamos hablando de lo mismo.
    • No estoy del todo seguro, a mí mismo; pero, tuve que usar el GUID de la asamblea de la información para conseguir que el escenario de trabajo (ver la parte de abajo de mi respuesta en esa página.) Mi (tentativo) la conclusión es que Windows utiliza una interfaz COM para hacer un enlace SSL «palo» para una aplicación en particular.

Dejar respuesta

Please enter your comment!
Please enter your name here