Что такое GAC в .NET?


187

Просто ищу краткий обзор GAC для дилетанта, а не ссылку, пожалуйста.

Ответы:


177

Правильно, поэтому в основном это способ сохранить глобальную доступность DLL, не беспокоясь о конфликтах. Нет больше DLL Ад. Каждая архитектура и версия получают свое собственное место для жизни.

Он также получает свой собственный способ просмотра в Проводнике, так что если вы перейдете к

C: \ Windows \ сборки

В проводнике Windows перечислены все библиотеки DLL.

Но если вы запустите cmd, вы можете увидеть, как это действительно структурировано:

C: \ Users \ tritter> cd C: \ Windows \ сборка

C: \ Windows \ Assembly> реж

 Каталог C: \ Windows \ сборки

20.07.2009 14:18 <DIR> GAC
17.06.2009 16:22 <DIR> GAC_32
17.06.2009 16:22 <DIR> GAC_64
17.06.2009 16:22 <DIR> GAC_MSIL
 ... чик ...
               0 файл (ов) 0 байт
               9 Dir (s) 90,538,311,680 байт бесплатно

C: \ Windows \ сборка> cd GAC_64

C: \ Windows \ сборка \ GAC_64> реж

 Каталог C: \ Windows \ Assembly \ GAC_64

17.06.2009 16:22 <DIR>.
17.06.2009 16:22 <DIR> ..
19.01.2008 09:54 <DIR> blbproxy
 ... чик ...
19.01.2008 09:54 <DIR> srmlib
19.01.2008 06:11 <DIR> System.Data
19.01.2008 06:11 <DIR> System.Data.OracleClient
 ... чик ...
               0 файл (ов) 0 байт
              34 Dir (s) 90,538,311,680 байт свободно

C: \ Windows \ assembly \ GAC_64> cd System.Data

C: \ Windows \ сборка \ GAC_64 \ System.Data> реж
 Каталог C: \ Windows \ Assembly \ GAC_64 \ System.Data

19.01.2008 06:11 <DIR>.
19.01.2008 06:11 <DIR> ..
11.04.2009 12:20 <DIR> 2.0.0.0__b77a5c561934e089
               0 файл (ов) 0 байт
               3 Dir (s) 90,538,311,680 байт бесплатно

C: \ Windows \ assembly \ GAC_64 \ System.Data> cd 2.0.0.0__b77a5c561934e089

C: \ Windows \ сборка \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089> реж

 Каталог C: \ Windows \ Assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089

11.04.2009 12:20 <DIR>.
11.04.2009 12:20 <DIR> ..
11.04.2009 12:12 3 008 512 System.Data.dll
               1 файл (ов) 3 008 512 байт
               2 Dir (s) 90,538,311,680 байт свободно

C: \ Windows \ сборка \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089>

Здесь вы можете увидеть версию 2.0.0.0__b77a5c561934e089 из System.Data.

DLL идентифицируется по 5 частям:

  1. название
  2. Версия
  3. Архитектура
  4. культура
  5. Открытый ключ

Хотя первые 3, как правило, большие.


12
Вы получаете +1 за упоминание о том, что это новый способ иметь глобальные ссылки на .dll, избегая "dll hell". (Было бы еще лучше ответить, если бы вы подробно рассказали о том, что такое dll-ад и как GAC обходит это ... у вас есть основной план этого ... но я бы просто ужесточил вставьте структуру каталогов и добавьте немного того, как dll идентифицируется и является уникальным) Не хочу звучать слишком негативно ... Я дал +1!
Беска

Только не предоставляйте ссылку:]. Вопрос о вашем ответе: «3. Архитектура» определяется именем каталога «GAC_64»? И является ли культура в этом случае пустой - значение, которое будет между подчеркиванием «__»?
Дэнни Буллис

2
GAC существует только для приложений .NET?
Зак Смит

93

GAC = глобальный кэш сборок

Давайте разберемся с этим:

  • глобальный - относится ко всей машине
  • сборка - то, что .NET называет своими библиотеками кода (DLL)
  • кеш - место для хранения вещей для более быстрого / общего доступа

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


64

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

Каждый компьютер, на котором установлена ​​среда с общим языком, имеет машинный кэш кода, называемый глобальным кэшем сборок. В глобальном кэше сборок хранятся сборки, специально предназначенные для совместного использования несколькими приложениями на компьютере.

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

Вещи, которые содержит MSDN, могут вас удивить ... обычно вы можете прочитать это как статью. Простые и самые важные элементы в верхней части, сложные детали глубже. Это, конечно, объясняет это лучше, чем я мог.

Обратите внимание, что Visual Studio отображает все библиотеки DLL в GAC на вкладке .NET окна « Ссылки» . (Щелкните правой кнопкой мыши проект в обозревателе решений и выберите Добавить ссылку.) Это должно дать вам более гибкую идею.


Он сказал, что нет ссылки, хотел объяснения своими словами.
user142350

В оригинальной версии его поста (я думаю, он быстро его отредактировал) это не было указано!
Нолдорин

15
Кроме того, слова MSDN всегда будут лучше и точнее. :)
Нолдорин


12

Глобальный кэш сборок (GAC) - это папка в каталоге Windows, в которой хранятся сборки .NET, которые специально предназначены для совместного использования всеми приложениями, выполняемыми в системе. Сборки могут использоваться несколькими приложениями на машине путем регистрации их в глобальном кэше сборок (GAC). GAC - это машинный локальный кеш сборок, поддерживаемый .NET Framework.


11

Exe Application, прежде всего, ссылается из текущего каталога на подкаталог. А затем, системный каталог. Системный каталог VS6.0 был ..windows / system32. Системный каталог .NET похож на приведенный ниже путь GAC.

  1. Путь GAC

    1) C: \ Windows \ Assembly (для .NET 2.0 ~ 3.5)

    2) C: \ Windows \ Microsoft.NET \ сборка (для .NET 4.0)

  2. Как установить сборку в GAC (от имени администратора)

    1) Перетаскивание

    2) Используйте GacUtil.exe с командной строкой Visual Studio

     gacutil -i [Path][Assembly Name].dll
    • Примечание. Чтобы установить сборку в GAC, сборка должна иметь строгое имя. В противном случае вы получите сообщение об ошибке: Ошибка при добавлении сборки в кэш: попытка установить сборку без строгого имени.
  3. Как удалить сборку из GAC (от имени администратора)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Примечание: не имеет расширения, .dll. Version и PublickeyToken могут быть опущены и проверены в сборке GAC.

5

Это похоже на то, что реестр COM сделан правильно в отношении физических файлов, а также их интерфейса и информации о местоположении. В COM файлы были везде с централизованными метаданными. GAC централизованно снимает взрыв.


5

GAC (Global Assembly Cache) - это место, где находятся все общие сборки .NET.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.