sharp from compiler compile comando .net visual-studio com-interop compiler-options

.net - from - “Registrarse para interoperabilidad COM” vs “Hacer visible el ensamblaje COM”



compile c# project from command line (1)

¿Cuál es la diferencia real entre estas dos opciones? Lo que sé es:

Registrarse para COM Interop
Estas opciones ejecutan regasm en el ensamblaje y registran el ensamblaje como un componente COM (o tal vez no) en el registro con todas las entradas de registro COM similares. ¿Este paso genera un archivo TLB? ¿Qué más se hace?

A veces veo que se genera un tlb cuando compilo el proyecto, pero a veces no, ¿por qué sucede esto?

Hacer el montaje COM visible
¿Qué efecto tiene éste en una asamblea? Si tengo el siguiente tipo dentro de este ensamblaje, ¿todavía debo especificar "Hacer que el ensamblaje sea visible", aunque mi tipo esté marcado como ComVisible?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)] public interface IMyInterface { }


"Hacer que el ensamblaje sea visible" es un gran martillo para hacer que todos los tipos públicos en el ensamblaje [ComVisible]. Rara vez es deseable, deseará seleccionar los tipos específicos que desea que sean visibles, como lo hizo en su fragmento.

Una vez que se haya construido el ensamblaje, debe registrarse para que un cliente COM pueda encontrarlo nuevamente. El que solo usa un número para identificar el objeto que desea crear, el GUID, una búsqueda adicional es necesario para averiguar qué DLL lo implementa. El registro implica escribir claves en la parte HKLM/Software/Classes/CLSID/{guid} del registro. Puede hacerlo usted mismo ejecutando Regasm.exe /codebase /tlb o puede dejarlo en el sistema de compilación para que lo haga automáticamente después de construir el ensamblaje.

Que es lo que hace "Registrarse para interoperabilidad COM". Es deseable, ya que garantiza que la copia antigua de la DLL se anule automáticamente el registro antes de que se sobrescriba, lo que evita la contaminación del registro. VS debe ejecutar elevado para tener acceso de escritura a esas claves de registro, una razón para hacerlo opcional. O simplemente no desea registrarlo, como ocurre en los servidores de compilación. No puedo comentar por qué a veces no obtienes el .tlb sin más diagnósticos.