Меню

Как установить сборку в gac

Создание пакетов установки

Глобальный кэш сборок GAC (Global Assembly Cache). Утилита gacutil.exe

Все сборки, находящиеся в GAC, подписаны строгим именем — при установке сборки среда Common Language Runtime проверяет сборку на уникальность и сравнивает ее с другими, уже имеющимися сборками.

При этом появляется описание команд утилиты (рис. 9.16), среди которых нас интересуют всего три:

Управление сборками при помощи утилиты gacutil.exe — не самый удобный способ. Более широкие возможности управления сборками предоставляет консоль MMC (Microsoft Management Console), для запуска которой в окне Выполнить (Run) набираем mmc (рис. 9.17).

В появившемся окне выбираем в меню «Консоль\Добавить или удалить оснастку …» (рис. 9.18).

В открывшемся окне можно управлять сборками — добавлять их или удалять (рис. 9.20).

Не удаляйте сборки, которые вам неизвестны, — вы можете нарушить работоспособность некоторых программ!

Вопросы и ответы

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка:

Необработанное исключение типа «System.InvalidOperationException» в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления «lblResult» не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа «System.InvalidOperationException» в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Источник

Глобальный кэш сборок Global Assembly Cache

На каждом компьютере с установленной средой CLR имеется кэш кода на уровне компьютера, называемый глобальным кэшем сборок. Each computer where the Common Language Runtime is installed has a machine-wide code cache called the Global Assembly Cache. В глобальном кэше сборок сохраняются сборки, специально предназначенные для совместного использования на компьютере несколькими приложениями. The Global Assembly Cache stores assemblies specifically designated to be shared by several applications on the computer.

Организовывать совместное использование сборок путем установки их в глобальный кэш следует только при необходимости. You should share assemblies by installing them into the Global Assembly Cache only when you need to. Как правило, зависимости между сборками следует сохранять закрытыми, а сами сборки нужно размещать в папке приложения, если они не предназначены для совместного использования. As a general guideline, keep assembly dependencies private, and locate assemblies in the application directory unless sharing an assembly is explicitly required. Кроме того, не обязательно устанавливать сборки в глобальный кэш сборок для доступа к ним из COM-взаимодействия или из неуправляемого кода. In addition, it is not necessary to install assemblies into the Global Assembly Cache to make them accessible to COM interop or unmanaged code.

Читайте также:  Как установить os x yosemite на mac с нуля

Существуют случаи, в которых явно не требуется установка сборки в глобальный кэш сборок. There are scenarios where you explicitly do not want to install an assembly into the Global Assembly Cache. Если одна из составляющих приложения сборок помещается в глобальный кэш сборок, то после этого вы не сможете скопировать или установить приложение с помощью команды xcopy путем копирования каталога приложения. If you place one of the assemblies that make up an application in the Global Assembly Cache, you can no longer replicate or install the application by using the xcopy command to copy the application directory. Для этого также потребуется переместить сборку в глобальный кэш сборок. You must move the assembly in the Global Assembly Cache as well.

Существует два способа развертывания сборки в глобальном кэше сборок. There are two ways to deploy an assembly into the Global Assembly Cache:

Использование программы установки, предназначенной для работы с глобальным кэшем сборок. Use an installer designed to work with the Global Assembly Cache. Данный подход является предпочтительным при установке сборок в глобальный кэш. This is the preferred option for installing assemblies into the Global Assembly Cache.

Используйте инструмент разработчика под названием средство глобального кэша сборок (Gacutil.exe) из Windows SDK. Use a developer tool called the Global Assembly Cache tool (Gacutil.exe), provided by the Windows SDK.

В сценариях развертывания для установки сборок в глобальный кэш используйте установщик Windows. In deployment scenarios, use Windows Installer to install assemblies into the Global Assembly Cache. Средство глобального кэша сборок используйте только при разработке, поскольку оно не обеспечивает подсчет ссылок на сборку и другие возможности, предоставляемые при использовании установщика Windows. Use the Global Assembly Cache tool only in development scenarios, because it does not provide assembly reference counting and other features provided when using the Windows Installer.

Читайте также:  Как установить русификатор на need for speed undercover

Администраторы часто защищают папку systemroot с помощью списка управления доступом, определяющего права на запись и выполнение. Administrators often protect the systemroot directory using an access control list (ACL) to control write and execute access. Так как глобальный кэш сборок устанавливается в подкаталоге каталога SystemRoot, он наследует этот список управления доступом. Because the Global Assembly Cache is installed in a subdirectory of the systemroot directory, it inherits that directory’s ACL. Рекомендуется разрешать удаление файлов из глобального кэша сборок только пользователям, имеющим права доступа администратора. It is recommended that only users with Administrator privileges be allowed to delete files from the Global Assembly Cache.

Сборки, развернутые в глобальном кэше сборок, должны иметь строгие имена. Assemblies deployed in the Global Assembly Cache must have a strong name. При добавлении сборки в глобальный кэш сборок выполняется проверка целостности всех входящих в нее файлов. When an assembly is added to the Global Assembly Cache, integrity checks are performed on all files that make up the assembly. Кэш выполняет такую проверку целостности, чтобы гарантировать, что сборка не была изменена (например, если файл был изменен, но изменения не были отражены в манифесте сборки). The cache performs these integrity checks to ensure that an assembly has not been tampered with, for example, when a file has changed but the manifest does not reflect the change.

Источник

Использование разделяемых сборок

Установка сборок со строгими именами в GAC

Для взаимодействия с GAC на своей машине необходимо иметь права администратора, что может требовать внесения соответствующих изменений в параметры контроля учетных записей пользователей (UAC) в Windows Vista или Windows 7.

Читайте также:  Как самим установить посудомоечную машину

Ниже перечислены некоторые наиболее важные опции этой утилиты (для вывода полного списка поддерживаемых ею опций служит флаг /?):

Опция Описание
/i Инсталлирует сборку со строгим именем в GAC
/u Удаляет сборку из GAC
/l Отображает список сборок (или конкретную сборку) в GAC

Чтобы инсталлировать сборку со строгим именем с помощью gacutil.exe, нужно открыть в Visual Studio окно командной строки и перейти в каталог, в котором содержится библиотека fontinfo.dll, например:

После этого можно проверить, действительно ли библиотека была развернута, выполнив следующую команду (обратите внимание, что расширение файла при использовании опции /l не указывается):

Если все в порядке, в окне консоли должен появиться примерно такой вывод (разумеется, значение PublicKeyToken будет уникальным):

Просмотр содержимого GAC с помощью проводника Windows

В этой новой папке также имеется набор подкаталогов, каждый из которых именован в соответствии с дружественным именем конкретной библиотеки кода (например, \System.Windows.Forms,- \System.Core и т.д.). Внутри каждой папки с дружественным именем размещен еще один подкаталог, который всегда именуется по следующей схеме:

Использование сборки

Несмотря на это, добавим в новое клиентское приложение следующий тестовый код:

Исследование манифеста SharedCarLibClient

Если теперь сравнить значение открытого ключа, записанного в манифесте клиента, и отображаемого в GAC, то легко обнаружить, что они совпадают. Как упоминалось ранее, открытый ключ является одной из составляющих идентификационных данных строго именованной сборки. Из-за этого CLR-среда будет загружать только версию 1.0.0.0 сборки по имени fontinfo, из открытого ключа которой может быть получено хеш-значение DC473F9D2D5D12C3. В случае невозможности обнаружить сборку, соответствующую такому описанию в GAC (и приватную сборку по имени fontinfo в каталоге клиента), будет сгенерировано исключение FileNotFoundException.

Источник