2013-03-27 2 views
4

Предположим, что у нас есть проект .NET в VS 2005 (VB .Net). В этом проекте используется COM-объект без GUI. Когда я добавляю ссылку на этот объект, VS создает interop dll. Но я добавляю новые методы к объекту COM в другом проекте. Как я могу обновить dll dll без явного вызова tlbimp? Я хочу, чтобы Intellisense отображал список новых методов в этом COM-объекте.Как можно легко обновить dll?

+0

Создайте шаг сборки для его регенерации, в зависимости от COM-библиотеки DLL? Он может подобрать измененную временную метку на COM-DLL, чтобы вызвать восстановление. – Rup

+0

Ну, я имею в виду предварительное обновление для Intellisense: пытается ли VS перехватить ссылочный COM-объект? – ilya

ответ

1

Если вы правильно поняли, что у вас есть COM-сервер (видимо, в процессе/DLL), который содержит объекты, которые вы обновляете. И вы хотите, чтобы эти обновления были доступны через IntelliSense в проекте клиента, если вы еще не скомпилировали COM-сервер, правильно?

Если да: это невозможно. Позвольте мне рассказать, почему:

IntelliSense создает только кеш документации для ссылок на проект. Ссылка на COM-серверы - это не то же самое, что ссылаться на .NET-проекты. Для проекта .NET он может создать кеш документации непосредственно из модели кода. Однако серверы COM обычно описываются на языке, компилятор не знает! tlbimp создает оболочку .NET, которая вызывает COM-сервер для вас. IntelliSense может понять оболочку (DLL, которая является не более чем автоматически генерируемой .NET DLL), но не то, что она на самом деле делает. Поэтому вам всегда нужно обновлять упаковку.

Всякий раз, когда вы вносите изменения в COM-сервер, вам необходимо зарегистрировать его (используя regsvr32), чтобы изменения были «видимыми» для клиента (в данном случае - tlbimp). Затем вам нужно повторно добавить ссылку на ваш проект .NET, результатом чего является tlbimp, генерирующий новую межплатную DLL, что понимает IntelliSense. Это сделка с COM под .NET сред ...

Однако вы могли бы попытаться автоматизировать процесс сборки немного дальше:

  1. На вашем серверном проекте, вызовите tlbimp в случае после сборки, и пусть это создаст Primary Interop Assembly.
  2. Автоматическое развертывание PIA до GAC.
  3. В вашем проекте клиента (проект .NET) обратитесь к PIA.
  4. Каждый раз, когда вы построить новый проект сервера, обновите кэш IntelliSense в клиентском проекте («Edit» -> «IntelliSense» -> «Обновить локальный кэш», или Ctrl + Сдвиг + R).

Надеюсь, это поможет!

+1

Спасибо, я понимаю, что .Net-оболочка нуждается в восстановлении, и мне нужно повторно добавить ссылку. – ilya

 Смежные вопросы

  • Нет связанных вопросов^_^