У меня есть .NET DLL (которая написана на C ++ / CLI). Части этого я хочу выставить через COM. Я делаю это и регистрирую его, используя "regasm my.dll / codebase". Все идет нормально. Но затем я изменяю некоторые вещи, и меняется номер версии сборки, плюс я перемещаю dll в другую папку. Я регистрирую его снова и смотрю на мой COM-объект в OLE / COM Viewer. Я вижу что-то вроде этого
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
Вопросы о нескольких версиях:
Так что я думаю, что последний COM-объект, который был зарегистрирован, выигрывает. Не имеет значения, если у меня зарегистрирован мой старый COM-объект 7.0.0.0, 7.0.0.27397 будет создан при создании экземпляра COM-объекта, потому что я зарегистрировал его в последний раз. Это правильно?
К сожалению, я не держал вокруг объекта 7.0.0.0. Есть ли способ избавиться от этого? Есть ли способ удалить все версии COM-объекта, кроме как войти в реестр и ударить его вручную?
Просто из любопытства, если я специально хотел создать экземпляр конкретной версии моего COM-объекта, есть ли способ сделать это? (Я использую C ++, если вы хотите привести пример кода).
Есть ли способ, которым я могу просто сказать regasm не хранить номер версии, потому что это, кажется, загромождает вещи, и я не вижу, в чем выгода. Если бы мой COM-объект претерпел значительные изменения API, я бы просто изменил GUID и progid, верно? Что делать, если я не хочу регистрировать несколько версий (я не хочу).