我不知道“正确”的方式,但我的团队用批处理文件解决了这个问题。我们将该文件称为“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+ 与正在编辑的代码版本保持同步变得很容易(好吧,尽可能容易) .