Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 2

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

WIX

Ответ 3

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

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

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

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