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