Що таке GAC у .NET?


187

Просто шукайте короткий огляд GAC для мирян, а не посилання, будь ласка.

Відповіді:


177

Так, в основному це спосіб зберегти DLL глобально доступними, не турбуючись про конфлікти. Більше немає пекла DLL. Кожна архітектура та версія отримує власне місце для проживання.

Також у нього є власний спосіб перегляду його в Провіднику, тому якщо ви переходите до цього

C: \ Windows \ збірка

У Windows Explorer він перераховує всі DLL-файли.

Але якщо ви підпалите cmd, ви можете бачити, як це насправді структуровано:

C: \ Користувачі \ tritter> cd C: \ Windows \ збірка

C: \ Windows \ збірка> реж

 Каталог 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 дир (и) 90,538,311,680 байт безкоштовно

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

C: \ Windows \ збірка \ GAC_64> реж

 Каталог C: \ Windows \ зборка \ 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> Система.Дані
19.01.2008 06:11 <DIR> Система.Дані.OracleClient
 ... сніп ...
               0 Файл (и) 0 байт
              34 дир (и) 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 дир (и) 90,538,311,680 байт безкоштовно

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

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

 Каталог 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 дир (и) 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 за те, що згадуєте, що це новий спосіб мати глобальні посилання .dlls, уникаючи "dll hell". (Було б ще кращою відповіддю, якби ви заглибились у те, що таке dll пекло, і як GAC обходить його ... у вас є основні контури цього ... але я б просто підтягнути структура каталогів введена, і додайте трохи того, як dll ідентифікований і унікальний) Не маю на увазі звучати занадто негативно ... Я дав +1!
Беска

Просто не надайте посилання:]. Питання щодо вашої відповіді, чи "3. Архітектура" вказана назвою каталогу "GAC_64"? І чи в цьому випадку культура порожня - значення, яке було б між підкресленнями "__"?
Danny Bullis

2
Чи існує GAC лише для програм .NET?
Зак Сміт

93

GAC = Кеш глобальної асамблеї

Давайте розбимо його:

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

Таким чином, GAC повинен бути місцем для зберігання бібліотек коду, щоб вони були доступними для всіх програм, що працюють на машині.


64

Кеш глобальної асамблеї

Кожен комп'ютер, на якому встановлено загальну мову виконання, має кешований кеш-код, який називається глобальним кеш-збором. Глобальний кеш-сховище зберігає збори, спеціально призначені для спільного використання кількома програмами на комп'ютері.

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

Те, що містить MSDN, може вас здивувати ... Ви зазвичай можете прочитати це як статтю. Прямий і найважливіший біт вгорі, заплутані деталі глибше вниз. Це, безумовно, пояснює це краще, ніж я міг.

Зауважте, що Visual Studio відображає всі DLL у GAC на вкладці .NET вікна Посилання . (Клацніть правою кнопкою миші на проект в Провіднику рішень і виберіть Додати довідку.) Це повинно дати вам більш відчутну ідею.


Він сказав, що немає посилання, хотів пояснення своїми словами.
користувач142350

У оригінальній версії його допису (я вважаю, що він швидко відредагував його), це не було зазначено!
Нолдорін

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. Версію та PublickeyToken можна опустити і перевірити в зборі GAC.

5

Це як у реєстрі COM зроблено правильно, що стосується фізичних файлів, а також їх інтерфейсу та інформації про місцезнаходження. У COM файли були скрізь, з централізованими метаданими. GAC централізує удар.


5

GAC (Global Assembly Cache) - це місце, де перебувають усі спільні .NET збори.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.