Jump to content

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

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

Требования

[ редактировать ]

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

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

[ редактировать ]

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

Инструмент глобального кэша сборок

[ редактировать ]

gacutil.exe — это старая утилита командной строки, поставляемая с .NET 1.1 и по-прежнему доступная в составе .NET SDK. [1]

Проверить доступность общей сборки в GAC можно с помощью команды:

gacutil.exe /l <assemblyName>

Зарегистрировать общую сборку в GAC можно с помощью команды:

gacutil.exe /i <assemblyName>

Или скопировав файл сборки в следующую папку:

%windir%\assembly\

Обратите внимание, что для .NET 4.0 расположение GAC теперь следующее:

%windir%\Microsoft.NET\assembly\

Другие возможности этой утилиты будут кратко описаны, если вы используете /? флаг, то есть:

gacutil.exe /?

Средство просмотра кэша сборок

[ редактировать ]

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

С выпуском .NET Framework 4 расширение оболочки средства просмотра кэша сборок устарело. [3]

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

[ редактировать ]

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

Выполнение

[ редактировать ]

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

Вызывающее приложение может указать версию сборки при обращении к ней, поэтому среда выполнения может просто обратиться к имени файла и использовать правильное.

Подводные камни

[ редактировать ]

Механизм Global Assembly Cache помогает избежать ада старых DLL , но у него все еще есть некоторые недостатки, такие как: [4]

  • По умолчанию приложения будут работать только с той версией .NET Framework , которая использовалась для их компиляции, что может привести к сбою приложения на компьютерах с установленными более новыми версиями .NET Framework — даже если приложение обычно работает правильно с более новой версией. версия.
  • Иногда необходимо использовать условную компиляцию , если некоторые основные вызовы .NET (используемые в приложении) поддерживаются только некоторыми версиями платформы.
  • Приложения .NET, использующие собственный код, рискуют оказаться несовместимыми даже с механизмом GAC.
  • Каждая сборка, добавляемая в GAC, должна иметь строгое имя . Процесс создания сборки со «строгим именем» в некоторых ситуациях может оказаться весьма болезненным. Например, если сборка зависит от другой сборки, не имеющей строгого имени, ее нельзя зарегистрировать в GAC. В тех случаях, когда код сторонней сборки не находится в распоряжении программиста, преобразование сборки в строгое имя фактически может оказаться невозможным.
  • Просмотр файлов с помощью стандартных API-интерфейсов Windows не позволяет выбирать библиотеки DLL, расположенные в папке «сборка», когда в проводнике отображается удобный для пользователя вид GAC.

См. также

[ редактировать ]
  1. ^ «Инструмент глобального кэша сборок (Gacutil.exe)» . Редмонд, Вашингтон : Корпорация Microsoft . Архивировано из оригинала 17 июля 2013 г. Проверено 27 мая 2010 г.
  2. ^ «Просмотр кэша сборок (Shfusion.dll)» . Редмонд, Вашингтон : Корпорация Microsoft . Архивировано из оригинала 30 июля 2013 г. Проверено 27 мая 2010 г.
  3. ^ «Как просмотреть содержимое глобального кэша сборок» . Редмонд, Вашингтон : Корпорация Microsoft . Архивировано из оригинала 19 июля 2013 г. Проверено 22 июля 2010 г.
  4. ^ Джон, Мюллер (11 февраля 2005 г.). «Десять ошибок управляемых приложений, которые нарушают совместимость версий» . devsource.com. Архивировано из оригинала 21 января 2013 г. Проверено 26 января 2008 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c11a2e00d6a8c5d12ab92cdca3e18be1__1717785240
URL1:https://arc.ask3.ru/arc/aa/c1/e1/c11a2e00d6a8c5d12ab92cdca3e18be1.html
Заголовок, (Title) документа по адресу, URL1:
Global Assembly Cache - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)