Início > .NET > Aonde foi parar o Global Assembly Cache no .NET Framework 4?

Aonde foi parar o Global Assembly Cache no .NET Framework 4?

Uma das primeiras coisas que você pode acabar se perguntando quando começa a trabalhar com o Visual Studio 2010 e o .NET Framework 4.0, é o seguinte “aonde foi parar o assembly que eu acabei de registrar no GAC?”.

Ontem, após muita tentativa-e-erro, acabei descobrindo que o GAC no .NET Framework 4.0 sofreu algumas alterações. Ele foi dividido em dois, um GAC para cada versão do Common Language Runtime (CLR).

A versão do CLR utilizada pelo .NET Framework 2.0 e pelo .NET Framework 3.5 é CLR v2.0. Portanto, os assemblies compilados com as versões 2.0 e 3.5 do .NET Framework ficam no mesmo GAC, localizado na pasta

%systemroot%\asseembly

Já os assemblies compilados com o .NET Framework 4.0 utilizam o CLR v4.0. Sendo assim, ficam no novo GAC, localizado na pasta

%systemroot%\Microsoft.NET\assembly

A primeira coisa que você irá notar é que o GAC do CLR v4.0 não usa a extensão do Windows Shell (shfusion.dll) que permitia visualizar todos os assemblies instalados como uma lista (com nome, versão e public key token). Aparentemente, esta extensão foi descontinuada, veja o segundo comentário neste post do site Microsoft Connect.

A Microsoft decidiu isolar o GAC desta nova versão da CLR para que as aplicações que utilizam o CLR v2.0 não consigam enxergar os assemblies desenvolvidos com o CLR v4.0.

Anúncios
  1. JP
    maio 14, 2010 às 10:30

    Muito bom o post.

    Essa separação deve ser necessária para que o side-by-side in-process funcione. Aqui estão dois links sobre isso.
    http://blogs.msdn.com/clrteam/archive/2009/06/03/in-process-side-by-side-part1.aspx
    http://channel9.msdn.com/shows/Going+Deep/CLR-4-Side-by-Side-In-Process-What-How-Why/

    Boa sorte com o blog! Vou criar um link no meu para cá.
    JP

  2. maio 17, 2010 às 23:49

    @JP – Excelente comentário! Eu não sabia desta alteração no CLR v4.0. Inclusive, por não estar ciente dela, eu estava escrendo uma extensão do Shell do Windows para substituir o shfusion.dll no GAC do CLR v4.0 em C++. Antes do recurso de execução lado-a-lado de diferentes versões do CLR dentro de um mesmo processo, esta era a única maneira segura de se fazer isto.
    Após ler o material que você indicou já migrei o código para C#, afinal de contas eu sou um péssimo programador C++.

    Obrigado por compartilhar esta informação!

  3. março 24, 2011 às 09:13

    Muito Obrigado… me ajudou demais.

    Excelente!!!

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: