Регистрация COM и GAC - PullRequest
       45

Регистрация COM и GAC

2 голосов
/ 02 октября 2008

У меня есть веб-проект, проект библиотеки C # и проект веб-настройки в Visual Studio 2005. Для веб-проекта необходима регистрация библиотеки C # в GAC. Это просто, просто добавьте папку GAC в проект установки и поместите туда основной вывод библиотеки C #. Библиотека C # также должна быть зарегистрирована для COM-взаимодействия. Я нажимаю выбрать основной выход в папке GAC и изменяю свойство Register на vsdrpCOM. Я создаю проект установки и запускаю его, но DLL никогда не регистрируется для COM.

Это не удивительно для меня. Мне всегда приходилось добавлять класс установщика, который имел пользовательское действие, которое использовало RegistrationServices.RegisterAssembly, чтобы правильно зарегистрировать мои библиотеки DLL для COM. Поэтому я применяю этот обходной путь, который я принимал в течение многих лет, в моей ситуации. Теперь я обнаружил, что пользовательские действия, назначенные первичному выходу в папке GAC проекта установки, не позволяют проекту установки даже построить.

Я всегда чувствовал себя так, словно хакерски пытался заставить .NET и COM хорошо играть с проектами установки и развертывания. Как правильно решить мою проблему?

Ответы [ 3 ]

5 голосов
/ 03 октября 2008

Чтобы зарегистрировать сборки с помощью COM, используйте: regasm / codebase. Подробнее см. http://msdn.microsoft.com/en-us/library/tzat5yw6(VS.80).aspx. Ваш метод установки в GAC кажется мне подходящим.

2 голосов
/ 03 октября 2008

Я не знаю о «правильном» способе, но моя команда решает эту проблему с помощью пакетных файлов. Мы называем этот файл чем-то вроде «cycleCOM.bat» и запускаем его после сборки, когда нам нужно обновить GAC и службы компонентов. (Я лично использую пусковую установку для клавиатуры, чтобы вызвать ее несколькими нажатиями клавиш)

Это упрощенное представление командного файла:

REM Unregister anything currently in component services

RemoveCom+.vbs

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regsvcs /u "C:\source\bin\FooCode.dll"

REM Remove from GAC

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil" /uf FooCode

REM Register in component services

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regsvcs "C:\source\bin\FooCode.dll"

REM Add to GAC

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil" /if "C:\source\bin\FooCode.dll"

Файл RemoveCom + .vbs закрывает все, что работает в службах компонентов. Его код:

set cat = CreateObject ("COMAdmin.COMAdminCatalog")
Set apps = cat.GetCollection("Applications")

bFound = false
apps.Populate

lNumApps = apps.Count

' Enumerate through applications looking for AppName.
Dim app
For I = lNumApps - 1 to 0 step -1
    Set app = apps.Item(I)
    If app.Name = "FooCode" Then
      cat.ShutdownApplication ("FooCode")
      apps.Remove(I)
      apps.SaveChanges
    End If
Next

У нас есть несколько версий этого сценария для каждой версии нашего приложения, над которым мы работаем локально, и сценарии упрощают (ну, насколько это возможно) синхронизацию GAC и COM + с версией код редактируется.

2 голосов
/ 02 октября 2008

WIX, позволит вам с легкостью устанавливать объекты и сборки COm в GAC

WIX

...