Методы программной установки сборки .NET в GAC - PullRequest
10 голосов
/ 22 сентября 2009

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

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 22 сентября 2009

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

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

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

Оболочка в System.EnterpriseServices очень похожа на эту старую запись в блоге и должна нормально работать.

5 голосов
/ 22 сентября 2009

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

...