Способы программной установки a.NET сборка в GAC

мне нужно создать небольшое приложение или скрипт для установки .NET-сборки в GAC. Я читал, что есть несколько способов сделать это, включая:

  • используя gacutil.exe
  • выполнение следующей строки кода:

    new System.EnterpriseServices.Internal.Publish().GACInstall("Foo.dll");

однако, что произойдет, если я просто создам соответствующие каталоги на машине и скопирую сборку в этот каталог? Структура каталога GAC является следующий:C:WindowsassemblyGAC_MSILFoo<version#>__<public token>Foo.dll

делают ли вышеуказанные два метода что-то особенное, кроме создания структуры папок и размещения в ней сборки?

2 ответов


Я сильно рекомендуется использовать существующие методы (например, те, которые вы упомянули), потому что они поддерживаются и поддерживаются Microsoft и будут продолжать работать с будущими выпусками.

быстрый взгляд на gacutil.exe с Контролировать Процесс показывает, что есть немного больше, чем просто копирование файлов:

  • проблемы параллелизма (например, временные файлы, замок WINDOWS\assembly\GACLock.dat, etc.)
  • уведомления (например, HKLM\SOFTWARE\Microsoft\Fusion\GACChangeNotification\...)
  • индексирование (например,HKLM\SOFTWARE\Microsoft\Fusion\NativeImagesIndex...)
  • проверка (например, сильное имя ...)

фантик в System.EnterpriseServices очень похоже на этот старый пост в блоге и должен работать просто отлично.


недавно нам пришлось сделать это для 10 серверов в корпоративной среде. Мы использовали Wix для создания очень простого MSI (серьезно - 5 минут работы) и опубликовали на всех серверах (и dev-боксах) через групповую политику.