Tengo una DLL .NET (que está escrita en C++/CLI). Partes de él quiero exponer a través de COM. Lo hago y lo registro usando "regasm my.dll/codebase". Hasta aquí todo bien. Pero luego cambio algunas cosas y el número de versión de los cambios de ensamblaje más muevo el dll a una carpeta diferente. Lo vuelvo a registrar y miro mi objeto COM en OLE/COM Viewer. Veo algo como esto¿Cómo funciona .NET/COM con múltiples versiones registradas a través de Regasm?
InprocServer32 [Codebase] = file://c://foo/bar/my.dll 7.0.0.0 [Class] = My.Blah.Class 7.0.0.0 [Assembly] = Sync, Version=7.0.0.0, Culture=neutral, PublicKeyToken=1dd19234234 7.0.0.0 [RuntimeVersion] = v2.0.50727 7.0.0.0 [CodeBase] = file://c:/dooby/do/my.dll 7.0.0.27397 [Class] = My.Blah.Class 7.0.0.27397 [Assembly] = Sync, Version=7.0.0.27397, Culture=neutral, PublicKeyToken=1dd19234234 7.0.0.27397 [RuntimeVersion] = v2.0.50727 7.0.0.27397 [CodeBase] = file://c://foo/bar/my.dll
Preguntas sobre múltiples versiones:
Así que creo que el último objeto COM que se gana registrado. No importa si tengo mi antiguo objeto COM 7.0.0.0 registrado, el 7.0.0.27397 es el que se creará cuando crea una instancia de mi objeto COM porque lo registré al último. ¿Es eso correcto?
Vaya, no guardé el objeto 7.0.0.0. ¿Hay alguna forma de deshacerse de él? ¿Hay alguna manera de eliminar todas las versiones de un objeto COM que no sea entrar en el registro y golpearlo a mano?
Solo por curiosidad, si específicamente quería crear una instancia de una versión particular de mi objeto COM, ¿hay alguna forma de hacerlo? (Estoy usando C++ si quieres dar un ejemplo de código).
¿Hay alguna forma en que pueda decirle a regasm que no almacene el número de versión porque parece que está abarrotando las cosas y no puedo ver cuál es el beneficio? Si mi objeto COM pasó por un cambio significativo en la API, simplemente cambiaría el GUID y el programa, ¿no? ¿Qué ocurre si no quiero registrar varias versiones (no las tengo)?
Estoy viendo evidencia de que COM siempre selecciona la versión con el número más alto de un componente registrado con múltiples versiones, no la última versión registrada. ¿Alguien puede confirmar esto? – BlueMonkMN