Каков GAC в.NET?

Можно наблюдать график, Вы создали использование GraphEdit, инструмент от DirectShow SDK. В GraphEdit выберите Файл-> Подключение к удаленному Графику...

для нахождения графика в списке, необходимо зарегистрировать его в рабочей объектной таблице:

void AddToRot( IUnknown *pUnkGraph, DWORD *pdwRegister ) 
{
    IMoniker* pMoniker;
    IRunningObjectTable* pROT;
    GetRunningObjectTable( 0, &pROT );

    WCHAR wsz[256];     
    swprintf_s( wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId() );
    CreateItemMoniker( L"!", wsz, &pMoniker );

    pROT->Register( 0, pUnkGraph, pMoniker, pdwRegister );

    // Clean up any COM stuff here ...
}

После уничтожения Вашего графика, необходимо удалить его из ГНИЛИ путем вызова IRunningObjectTable:: Отмените

180
задан Nosrama 12 August 2009 в 08:51
поделиться

5 ответов

Верно, по сути, это способ сохранить глобальный доступ к DLL, не беспокоясь о конфликтах. Больше никаких адских DLL. У каждой архитектуры и версии есть свое место для жизни.

У нее также есть собственный способ просмотра в проводнике, поэтому, если вы перейдете в

C: \ Windows \ assembly

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

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

C:\Users\tritter>cd C:\Windows\assembly

C:\Windows\assembly>dir

 Directory of C:\Windows\assembly

07/20/2009  02:18 PM    <DIR>          GAC
06/17/2009  04:22 PM    <DIR>          GAC_32
06/17/2009  04:22 PM    <DIR>          GAC_64
06/17/2009  04:22 PM    <DIR>          GAC_MSIL
 ...snip...
               0 File(s)              0 bytes
               9 Dir(s)  90,538,311,680 bytes free

C:\Windows\assembly>cd GAC_64

C:\Windows\assembly\GAC_64>dir

 Directory of C:\Windows\assembly\GAC_64

06/17/2009  04:22 PM    <DIR>          .
06/17/2009  04:22 PM    <DIR>          ..
01/19/2008  09:54 AM    <DIR>          blbproxy
 ...snip...
01/19/2008  09:54 AM    <DIR>          srmlib
01/19/2008  06:11 AM    <DIR>          System.Data
01/19/2008  06:11 AM    <DIR>          System.Data.OracleClient
 ...snip...
               0 File(s)              0 bytes
              34 Dir(s)  90,538,311,680 bytes free

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

C:\Windows\assembly\GAC_64\System.Data>dir
 Directory of C:\Windows\assembly\GAC_64\System.Data

01/19/2008  06:11 AM    <DIR>          .
01/19/2008  06:11 AM    <DIR>          ..
04/11/2009  12:20 PM    <DIR>          2.0.0.0__b77a5c561934e089
               0 File(s)              0 bytes
               3 Dir(s)  90,538,311,680 bytes free

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

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

 Directory of C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089

04/11/2009  12:20 PM    <DIR>          .
04/11/2009  12:20 PM    <DIR>          ..
04/11/2009  12:12 PM         3,008,512 System.Data.dll
               1 File(s)      3,008,512 bytes
               2 Dir(s)  90,538,311,680 bytes free

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

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

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

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

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

170
ответ дан 23 November 2019 в 06:12
поделиться

GAC = Global Assembly Cache

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

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

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

89
ответ дан 23 November 2019 в 06:12
поделиться

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

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

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

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

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

63
ответ дан 23 November 2019 в 06:12
поделиться

Централизованная библиотека DLL.

19
ответ дан 23 November 2019 в 06:12
поделиться

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

5
ответ дан 23 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: