Сборка проекта .NET COMInterop без предварительной регистрации службы COM - PullRequest
1 голос
/ 24 июня 2009

Я создаю пользовательский интерфейс C # для взаимодействия со службой COM (.exe). COM-проект VS2005 выводит действительную библиотеку типов (TLB), на которую ссылается проект C #. Однако проект VS2005 C # настаивает на том, чтобы служба была зарегистрирована для построения проекта C #, даже несмотря на то, что typelib выглядит совершенно корректно при рассмотрении с помощью OLE Object Viewer.

Мы бы не хотели регистрировать сервис на сервере сборки, если это возможно. Кроме того, отладочные сборки не могут зарегистрировать COM-объект в качестве службы, поскольку это усложняет отладку в целом и код запуска в частности (нельзя использовать F5 - Начать отладку).

Что я должен искать, чтобы это работало? Нужно ли регистрировать только TypeLib? Если так, почему COMInterop настаивал на том, чтобы служба или TLB были зарегистрированы для правильной сборки (и есть ли инструмент командной строки для этого на Win2003 с VS2005)?

Если я правильно помню, однажды раз я создал веб-сервис C #, который ссылался на COM-объект брандмауэра Win2003, но мы построили его на Win2000 (у которого такого нет), просто ссылаясь на файл TLB без регистрации. требуется, поэтому я не понимаю, почему это должно быть проблемой сейчас.

Ответы [ 2 ]

2 голосов
/ 24 июня 2009

Необходимо создать сборку взаимодействия с помощью инструмента tlbimp.exe . И добавьте ссылку на эту сборку в свой проект вместо typelib. В этом случае для сборки не потребуется зарегистрированный ком-сервер.

Если вы не хотите отправлять еще одну сборку, вы можете извлечь описание интерфейса из сгенерированной сборки взаимодействия с помощью Reflector и включить их в проект в качестве исходных файлов.

0 голосов
/ 24 июня 2009

Решено это путем добавления команды -regtypelib в службу COM, которая вызывает функцию AtlRegisterTypeLib, но не регистрирует службу.Неоптимальный, потому что он оставит зарегистрированные записи на сервере сборки, но быстро и это работает.

...