Невозможно удалить значение typelib COM [PrimaryInteropAssemblyName], используя REGASM / u - PullRequest
2 голосов
/ 15 июля 2011

Я надеялся, что кто-то может указать мне правильное направление.Я перечислил проблему в несколько шагов, чтобы, надеюсь, прояснить проблему.

  1. Я регистрирую C ++ DLL в COM, используя regsvr32 .
  2. Затем я использую tlbimp с атрибутом / primary в C ++ DLL для создания файла сборки, который может использоваться C #.
  3. Iзатем зарегистрируйте вновь сгенерированную сборку в GAC.
  4. Я вызываю regasm для сгенерированной сборки, чтобы библиотека типов C ++ содержала ссылку на сборку GACed.

Проблема заключается в том, чтокогда я использую regasm / u , он говорит, что он «успешно зарегистрирован».Но, когда я проверяю typelib в COM с помощью OLEVIEW, он все еще показывает ссылку PrimaryInterop на сборку GACed., но я получаю предупреждение о том, что:

RegAsm : warning RA0000 : Type library not un-registered since the assembly was
imported from COM

enter image description here

Спасибо за любую помощь, так как это сводит меня с ума;)

1 Ответ

3 голосов
/ 15 июля 2011

Шаг 4 неправильный, COM-сервер уже был зарегистрирован на шаге 1. Regasm.exe используется только при создании вашего собственного COM-сервера (атрибут [ComVisible]), а не при простом * 1003. * используйте один. Использование / primary на шаге 2 также ненадежно, вам нужна PIA только тогда, когда вы представляете COM-типы, которые вы импортировали, в вашем собственном публичном интерфейсе. Лучше всего избегать. Исправьте ущерб, который вы могли нанести, повторив шаг 1.

Сборка взаимодействия, сгенерированная tlbimp.exe, представляет собой небольшую вспомогательную сборку, которая содержит только объявления, автоматически сгенерированные из библиотеки типов. Помогает CLR генерировать thunks для методов интерфейса COM без необходимости разбора библиотеки типов. Обязательно используйте функцию Embed Interop Types, доступную в VS2010, если у вас есть эта редакция.

...