зарегистрировать dll - GUID не найдены в реестре

У меня есть c # -dll, и регистрация через regasm говорит об успехе, но идентификаторы GUID не были добавлены в реестр, и, следовательно, компонент нельзя нигде использовать. и я просто не знаю почему :(

атрибуты класса:

[ProgId( "blup" )]
[ClassInterface( ClassInterfaceType.None ), ComSourceInterfaces( typeof( blap ))]
[Guid( "0CFEF92B-A155-4353-B7A3-58A717193E0C" )]
[ComVisible( true )]
public class blup
...

атрибуты интерфейса:

[Guid( "9FD1B3E5-4873-403a-91AA-2EEC7296B38D" )]
[InterfaceType( ComInterfaceType.InterfaceIsIDispatch )]
[ComVisible ( true )]
public interface blap
...

assemblyInfo.cs:

...
[assembly: ComVisible( true )]
[assembly: Guid("37639A04-9DAC-40ee-ADBB-2F07F78FD265")]
...

опция, чтобы сделать сборку видимой, установлена ​​в true. регистрация для com-interop установлена ​​в false, так как я не хочу, чтобы она регистрировалась при каждой сборке.

регистрация через regasm / codebase -> успех. регистрация через regasm / codebase / tlb -> успешно.

но в обоих случаях я не могу найти ни одного из своих GUID в реестре.

При добавлении параметра / regfile в regasm файл создается, но состоит только из строк:

[HKEY_CLASSES_ROOT\Record\{D4DAB0A5-AC0A-3498-BD1E-6665735B5649}\1.3.3.7]
"Class"="<classname>+eventType"
"Assembly"="<name>, Version=1.3.3.7, Culture=neutral, PublicKeyToken=bba2258cd5ab986c"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///<filename>"

GUID из regfile нигде в vs-проекте не используется. все это работает - или, скорее, не работает - с Visual Studio 2008 на Windows 7 64.

заранее спасибо за любые подсказки. если я пропустил какую-то информацию, пожалуйста, дайте мне знать!


person Nico    schedule 03.08.2010    source источник
comment
У меня такая же проблема, и вот уже 4 года без ответа. Вы когда-нибудь понимали это? Странно то, что на 2-х разных машинах написано «успешно». Но только на одной из этих машин записи добавлены в реестр.   -  person mdiehl13    schedule 17.10.2014
comment
Хорошо, я понял свою проблему. На компьютере, на который я устанавливал, еще не было установлено расширяемость MSM.msi. Программа установки установила его после вызова Regasm, а не до этого.   -  person mdiehl13    schedule 17.10.2014


Ответы (2)


Вероятно, проблема заключается в другом представлении реестра для 32-разрядных и 64-битные программы. Что-то вроде того, что вы регистрируете .dll как 64-битный сервер, а затем смотрите с помощью 32-битного regedit или наоборот.

person sharptooth    schedule 03.08.2010
comment
спасибо за ответ, но, к сожалению, это не решение, как кажется. Я ищу в реестре вручную любой из своих GUID (run / regedit / strg + F / GUID), но не могу найти ни одного из них. даже после регистрации dll с помощью /windows/microsoft.net/framework64 / ... GUID не был добавлен. targetPlatform - это любой процессор. запуск regAsm из папки framework64 приводит к тому же поведению, что и запуск из папки framework. даже результаты, сгенерированные с помощью regfile: ‹filename›, абсолютно идентичны. - person Nico; 03.08.2010
comment
Как именно искать в реестре? - person sharptooth; 03.08.2010
comment
как указано в комментарии: (run / regedit / strg + F / GUID) - person Nico; 03.08.2010
comment
Это должно сработать. Может быть, здесь начинается виртуализация? - person sharptooth; 03.08.2010
comment
если вы говорите о виртуализации реестра, я думаю, что не могу отказаться от нее. но командная строка и regedit запускаются от имени администратора, поэтому я не вижу здесь потенциальных проблем. по крайней мере, не ясно: / - person Nico; 03.08.2010
comment
Как насчет запуска Process Monitor и просмотра того, что происходит с реестром, когда вы запускаете regasm? - person sharptooth; 03.08.2010

Я столкнулся с той же проблемой и обнаружил проблему. Похоже, что интерфейс не зарегистрирован, потому что не зарегистрирована библиотека типов.

Итак, вы должны использовать:

regasm /codebase /tlb Mylib.dll

Примечание. Извините, я думал, что вы не можете видеть записи интерфейса в реестре, поэтому предложил параметр / tlb.

person Mohankumar Ramasamy    schedule 19.12.2012