Глобальный кэш сборок - Global Assembly Cache
В Глобальный кэш сборок (GAC) является машинным Сборка CLI тайник для Инфраструктура общего языка (CLI) в Microsoft .NET Framework. Подход со специально контролируемым центральным репозиторием устраняет недостатки[нужна цитата ] в общая библиотека концепция и помогает избежать ошибок других решений, которые привели к таким недостаткам, как DLL ад.
Требования
Сборки находящиеся в GAC, должны придерживаться определенной схемы управления версиями, которая позволяет выполнять параллельно разные версии кода. В частности, такие сборки должны быть строго названный.
использование
Есть два способа взаимодействия с GAC: инструмент глобального кэша сборок (gacutil.exe) и средство просмотра кэша сборок (shfusion.dll).
Инструмент глобального кэша сборок
gacutil.exe это более старая утилита командной строки, которая поставлялась с .СЕТЬ 1.1 и по-прежнему доступен с .NET SDK.[1]
Проверить доступность общей сборки в GAC можно с помощью команды:
gacutil.exe / l <имя сборки>
Можно зарегистрировать общую сборку в GAC с помощью команды:
gacutil.exe / i <имя сборки>
Или скопировав файл сборки в следующее место:
% windir% сборка
Обратите внимание, что для .NET 4.0 расположение GAC теперь:
% windir% Microsoft.NET сборка
Другие параметры этой утилиты будут кратко описаны, если вы используете /? флаг, то есть:
gacutil.exe /?
Средство просмотра кэша сборок
Более новый интерфейс, Assembly Cache Viewer, интегрирован в проводник Виндоус.[2] просмотр % windir% сборка
(Например, C: WINDOWS сборка
) или же % WINDIR% Microsoft.NET сборка
, отображает сборки, содержащиеся в кэше, вместе с их версиями, языком и региональными параметрами, токеном открытого ключа и архитектурой процессора. Сборки устанавливаются перетаскиванием и удаляются путем выбора и нажатия кнопки удалить ключ или используя контекстное меню.
С запуском .NET Framework 4 расширение оболочки Assembly Cache Viewer устарело.[3]
Пример использования
В компьютере два Сборки CLI оба названы AssemblyA, но один - версии 1.0, а другой - версии 2.0. Поскольку требуется, чтобы оба были скомпилированы в файл с именем AssemblyA, они не могут существовать в одном каталоге внутри FAT32 файловая система. Вместо этого виртуальная файловая система GAC может использоваться программами, которым необходимо использовать каждую версию сборки отдельно.
Выполнение
GAC как конструкция фактически не существует в ОС Windows. Он реализуется и управляется CLI. Папки внутри % systemroot% названный сборка и Microsoft.NET сборка (для .NET 4.0) содержат все глобально доступные сборки с управляемыми именами файлов, чтобы можно было включить токены версии и открытого ключа. Таким образом, каждая версия может существовать в одном месте и вызываться, не требуя от последующих версий сохранения местоположения точек входа в код как обычно. Проводник Windows позволяет устанавливать сборки в эту папку с помощью перетаскивания только в том случае, если в противном случае их можно было бы установить из командной строки.
Вызывающее приложение может указывать версию сборки при обращении к ней, поэтому среда выполнения может просто ссылаться на имя файла, чтобы использовать правильный.
Ловушки
Механизм Global Assembly Cache помогает избежать устаревания DLL ад, но все же имеет ряд недостатков, таких как:[4]
- По умолчанию приложения будут работать только с версией .NET Framework используется для его компиляции, что может привести к сбою приложения на машинах с более новыми версиями .NET Framework, даже если приложение нормально работает с более новой версией.
- Иногда необходимо использовать условная компиляция если некоторые из основных вызовов .NET (используемых в приложении) поддерживаются только для некоторых версий платформы.
- Приложения .NET, использующие собственный код, рискуют несовместимостью даже с механизмом GAC.
- Каждая сборка, добавляемая в GAC, должна быть строго названный. В некоторых ситуациях процесс создания сборки со "строгим именем" может быть довольно болезненным. Например, если сборка зависит от другой сборки, имя которой не строгое, ее нельзя зарегистрировать в GAC. В случаях, когда код сторонней сборки не находится в распоряжении программиста, преобразование сборки в строго именованную может фактически оказаться невозможным.
- Просмотр файлов с помощью стандартных API Windows не позволяет выбирать библиотеки DLL, расположенные в папке «сборки», когда проводник показывает удобный для пользователя вид GAC.
Смотрите также
Рекомендации
- ^ «Инструмент глобального кэша сборок (Gacutil.exe)». Редмонд, Вашингтон: Корпорация Майкрософт. Получено 2010-05-27.
- ^ "Средство просмотра кэша сборок (Shfusion.dll)". Редмонд, Вашингтон: Корпорация Майкрософт. Получено 2010-05-27.
- ^ «Как: просмотреть содержимое глобального кэша сборок». Редмонд, Вашингтон: Корпорация Майкрософт. Получено 2010-07-22.
- ^ Джон, Мюллер (11 февраля 2005 г.). «Десять ловушек для управляемых приложений, убивающих совместимость версий». devsource.com. Архивировано из оригинал на 21.01.2013. Получено 2008-01-26.