O que é o GAC no .NET?

187

Apenas procurando uma breve visão geral do GAC para um leigo, não um link, por favor.

Nosrama
fonte

Respostas:

177

Certo, basicamente é uma maneira de manter as DLLs acessíveis globalmente sem se preocupar com conflitos. Não há mais DLL Hell. Cada arquitetura e versão tem seu próprio lugar para morar.

Ele também possui uma maneira própria de navegar no Explorer, portanto, se você for para

C: \ Windows \ assembly

No Windows Explorer, lista todas as DLLs.

Mas se você iniciar cmd, poderá ver como é realmente estruturado:

C: \ Usuários \ tritter> CD C: \ Windows \ assembly

C: \ Windows \ assembly> dir

 Diretório de C: \ Windows \ assembly

20/07/2009 02:18 <DIR> GAC
17/06/2009 04:22 <DIR> GAC_32
17/06/2009 04:22 <DIR> GAC_64
17/06/2009 04:22 <DIR> GAC_MSIL
 ...recorte...
               0 Arquivo (s) 0 bytes
               9 diretório (s) 90.538.311.680 bytes grátis

C: \ Windows \ assembly> CD GAC_64

C: \ Windows \ assembly \ GAC_64> dir

 Diretório de C: \ Windows \ assembly \ GAC_64

17/06/2009 16:22 <DIR>.
17/06/2009 04:22 <DIR> ..
19/01/2008 09:54 <DIR> blbproxy
 ...recorte...
19/01/2008 09:54 <DIR> srmlib
19/01/2008 06:11 <DIR> System.Data
19/01/2008 06:11 <DIR> System.Data.OracleClient
 ...recorte...
               0 Arquivo (s) 0 bytes
              34 Dir (s) 90.538.311.680 bytes grátis

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

C: \ Windows \ assembly \ GAC_64 \ System.Data> dir
 Diretório de 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 Arquivo (s) 0 bytes
               3 diretório (s) 90.538.311.680 bytes grátis

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

 Diretório de 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 arquivo (s) 3.008.512 bytes
               2 diretório (s) 90.538.311.680 bytes grátis

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

Aqui você pode ver a versão 2.0.0.0__b77a5c561934e089 do System.Data.

Uma DLL é identificada por 5 partes:

  1. Nome
  2. Versão
  3. Arquitetura
  4. Cultura
  5. Chave pública

Embora os três primeiros sejam geralmente os grandes.

Tom Ritter
fonte
12
Você recebe um +1 por mencionar que é uma nova maneira de referenciar .dlls globalmente, evitando o "inferno da dll". (Seria uma resposta ainda melhor se você entendesse um pouco do que diabos é a dll e como o GAC o contorna ... você tem o esboço básico disso ... mas eu apenas reforçava a estrutura de diretórios inserida e adicione um pouco de como a dll é identificada e única) Não pretenda parecer muito negativo ... Eu dei +1!
12339 Beska
Apenas não forneça um link:]. Pergunta sobre sua resposta, a "3. Arquitetura" especificada pelo nome do diretório "GAC_64"? E a Cultura, neste caso, está em branco - o valor que estaria entre os sublinhados "__"?
precisa
2
O GAC existe apenas para aplicativos .NET?
Zach Smith
93

GAC = cache global de assemblies

Vamos dividir:

  • global - aplica-se a toda a máquina
  • assembly - o que o .NET chama de bibliotecas de código (DLLs)
  • cache - um local para armazenar itens para acesso mais rápido / comum

Portanto, o GAC deve ser um local para armazenar bibliotecas de códigos, para que sejam acessíveis a todos os aplicativos em execução na máquina.

Steven A. Lowe
fonte
64

Cache de montagem global

Cada computador em que o Common Language Runtime está instalado possui um cache de código para toda a máquina chamado cache global de assemblies. O cache global de assemblies armazena assemblies especificamente designados para serem compartilhados por vários aplicativos no computador.

Você deve compartilhar montagens instalando-as no cache de montagem global somente quando necessário. Como orientação geral, mantenha as dependências de montagem privadas e localize as montagens no diretório do aplicativo, a menos que o compartilhamento de uma montagem seja explicitamente necessário. Além disso, não é necessário instalar assemblies no cache global de assemblies para torná-los acessíveis para interoperabilidade COM ou código não gerenciado.

As coisas que o MSDN contém podem surpreendê-lo ... geralmente você pode lê-lo como um artigo. Os bits diretos e mais importantes no topo, os detalhes intrincados mais profundamente. Certamente explica melhor do que eu poderia.

Observe que o Visual Studio exibe todas as DLLs no GAC na guia .NET da janela References . (Clique com o botão direito do mouse em um projeto no Solution Explorer e selecione Add Reference.) Isso deve fornecer uma idéia mais tangível.

Noldorin
fonte
Ele disse que não havia ligação, queria uma explicação com suas próprias palavras.
User142350
Na versão original de seu post (acredito que ele tenha editado rapidamente), isso não foi especificado!
Noldorin
15
Além disso, as palavras do MSDN sempre serão melhores e mais precisas. :)
Noldorin
18

Biblioteca DLL centralizada.

Jeff
fonte
12

O Global Assembly Cache (GAC) é uma pasta no diretório do Windows para armazenar os assemblies .NET especificamente designados para serem compartilhados por todos os aplicativos executados em um sistema. Os assemblies podem ser compartilhados entre vários aplicativos na máquina registrando-os no cache global de Assembly (GAC). O GAC é um cache local de assemblies em toda a máquina, mantido pelo .NET Framework.

Kalyan Raj S
fonte
11

Exe Application, em primeiro lugar, referências de um diretório atual para um subdiretório. E então, diretório do sistema. O diretório do sistema VS6.0 era ..windows / system32. O diretório do sistema .NET é como o caminho abaixo do GAC.

  1. Caminho do GAC

    1) C: \ Windows \ Assembly (para .NET 2.0 ~ 3.5)

    2) C: \ Windows \ Microsoft.NET \ assembly (para .NET 4.0)

  2. Como instalar um assembly no GAC (como administrador)

    1) Arrastar e soltar

    2) Use GacUtil.exe com o prompt de comando do Visual Studio

     gacutil -i [Path][Assembly Name].dll
    • Nota: Para instalar um assembly no GAC, o assembly deve ter um nome forte. Caso contrário, você receberá um erro como este: Falha ao adicionar assembly ao cache: Tente instalar um assembly sem um nome forte.
  3. Como desinstalar um assembly do GAC (como administrador)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Nota: não tem extensão, .dll. A versão e o PublickeyToken podem ser omitidos e verificados no assembly do GAC.
Software INS
fonte
5

É como o registro COM feito corretamente, com relação aos arquivos físicos, bem como às informações de interface e localização. No COM, os arquivos estavam por toda parte, com metadados centralizados. O GAC centraliza a filmagem.

ProfK
fonte
5

O GAC (Global Assembly Cache) é o local onde residem todos os assemblies .NET compartilhados.

fdsf
fonte