Введение

Глобальный кэш сборок (GAC) — это кэш CLI-сборок, доступный на уровне всей машины, для Common Language Infrastructure (CLI) в Microsoft .NET Framework. Использование специально контролируемого центрального репозитория решает проблемы, присущие концепции общих библиотек, и помогает избежать недостатков других решений, приводивших к таким проблемам, как "ад DLL".

Требования

Сборки, размещенные в GAC, должны соответствовать определенной схеме версионирования, позволяющей одновременное выполнение различных версий кода. В частности, такие сборки должны иметь сильное имя.

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

Существует два способа взаимодействия с GAC: инструмент Global Assembly Cache Tool (gacutil.exe) и средство просмотра кэша сборок (shfusion.dll).

Просмотр кэша сборки

Новый интерфейс, Assembly Cache Viewer, интегрирован в проводник Windows. Просмотр каталогов %windir%\assembly\ (например, C:\WINDOWS\assembly) или %WINDIR%\Microsoft.NET\assembly отображает сборки, содержащиеся в кэше, вместе с их версиями, культурой, токеном открытого ключа и архитектурой процессора. Сборки устанавливаются перетаскиванием, а удаляются выбором и нажатием клавиши Delete или с помощью контекстного меню. С выпуском .NET Framework 4 расширение оболочки Assembly Cache Viewer устарело.

Пример использования

На компьютере установлено две сборки CLI с одинаковым именем AssemblyA, но одна имеет версию 1.0, а другая – 2.0. Поскольку обе сборки должны быть скомпилированы в файл с именем AssemblyA, они не могут находиться в одной папке в файловой системе FAT32. Вместо этого программы, которым требуется использовать конкретную версию сборки, могут использовать виртуальную файловую систему GAC.

Реализация

GAC как концепция фактически не существует в ОС Windows. Она реализована и управляется средой CLR. Папки в %systemroot% с именами assembly и Microsoft.NET\assembly (для .NET Framework 4.0) содержат все глобально доступные сборки с управляемыми именами файлов, позволяя включать в них токены версии и открытого ключа. Таким образом, различные версии могут существовать в одном и том же месте и вызываться без необходимости сохранения расположения точек входа кода последующими версиями, как это обычно происходит. Windows Explorer позволяет устанавливать сборки в эту папку методом перетаскивания, только если их установка была бы разрешена из командной строки. Приложение, обращающееся к сборке, может указать требуемую версию, и среда выполнения сможет использовать соответствующую сборку, просто обращаясь к имени файла.