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

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

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

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

3 ответа

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

Я не знаю о "правильном" способе, но моя команда решает эту проблему с помощью пакетных файлов. Мы называем файл чем-то вроде "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+ с версией редактируемого кода.,

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

WIX

Другие вопросы по тегам