VB .NET - Obtendo os assemblies do GAC - Global Assembly Cache
Você já deve ter ouvido
ou lido algumas vezes a palavra assembly na documentação.NET.
Então você já deve saber o que é um assembly ou assemblies no plural ? |
No ambiente da plataforma .NET o assembly é a unidade de distribuição para programas e livrarias de classes. Um Assembly é apenas um arquivo com a extensão .exe, para programas executáveis, ou com a extensão .dll, para livraria de classes que residem em uma DLL - Dinamic Link Library.
Um assembly consiste de um ou mais módulos (arquivos como um programa executável ou dll requerem). Cada módulo em um assembly possui um correspondente arquivo manisfest que fornece os metadados (informação sobre o módulo). O próprio assembly trata o manifest master que descreve cada módulo que o assembly contém bem como os atributos específicos do assembly.
No assembly, o código reside no formato de uma linguagem intermediária (IL); antes que o código do assembly seja executado, um compilador just-in-time (JIT) no sistema de origem compila o código IL em um código nativo.
Assemblies podem ser privativos para uma aplicação ou compartilhados entre múltiplas aplicações. Um assembly privativo de uma aplicação esta localizado no subdiretório da aplicação. Já um assembly compartilhado esta localizado no Global Assembly Cache - GAC (em geral na pasta c:\Windows\Assembly). Para colocar um assembly no GAC, você pode usar o utilitário de linha de comando GACUTIL.
Um assembly compartilhado difere de um privado pois o assembly compartilhado possui uma chave pública que identifica de forma única o assembly ( um nome forte ou strong name).
O GAC - Global Assembly Cache é um local em seu disco rígido onde o Windows armazena os assemblies (.dll/ou .exe) que podem ser usados por muitas aplicações. Na verdade, todas as .dlls Usadas na plataforma .NET são armazenadas no GAC e referenciadas quando adicionadas a um projeto (Ex: imports System.IO).
A localização típica desses arquivos é na pasta "C:\WINDOWS\ assembly" Você pode navegar para estas pasta via Explorer, porém você não pode obter uma lista desses assemblies simplesmente usando o as operações padrões para arquivos e diretórios
A plataforma .NET inclui um utilitário chamado gacutil.exe que pode ser usado para tratar com os assemblies do GAC. Sua localização pode variar dependendo da versão da plataforma .NET instalada mas geralmente ele esta localizado em: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
Neste artigo eu vou mostrar como usar este utilitário e os recursos da plataforma .NET disponíveis nos namespaces System.Diagnostics e System.Reflection para exibir os assemblies do GAC em uma aplicação Windows Forms usando a linguagem VB .NET.
Criando o projeto no VB .NET
Abra o Visual Basic 2010 Express Edition e no menu File clique em New Project e selecione o template Windows Forms Application informando o nome ListaAssembliesGAC;
No formulário form1.vb vamos incluir um controle um controle GroupBox e no seu interior um controle ListView e definir as seguintes propriedades do controle ListView:
1- Dock = fill
2 - Columns - Defina duas colunas conforme mostra a figura abaixo:
3- GridLines - True
4- View - Details
O leaiute do formulário deverá ficar conforme a figura abaixo:
No início do formulário vamos incluir as declarações dos namespaces :
Imports
System.IO
Imports System.Reflection
Imports System.Diagnostics
No evento Load do formulário form1.vb inclua o código abaixo:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' caminho do aplicativo gacutil.exe na minha maquina local Dim utilPath = "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\gacutil.exe" Dim gacUtilProcess As New Process() With gacUtilProcess.StartInfo ' Path do utilitário .FileName = utilPath ' A saida será obtida em um objeto StreamReader .RedirectStandardOutput = True .UseShellExecute = False ' Não vamos mostrar a janela do utilitário quando ele iniciar .CreateNoWindow = True ' /l (caixa baixa "L") apenas diz ao utilitário para listar os assemblies .Arguments = "/l" End With ' inicia o utilitário gacutil.exe gacUtilProcess.Start() ' redireciona a a saida do gacutil.exe output para o StreamReader Dim gacSaida As StreamReader = gacUtilProcess.StandardOutput ' Le a saida do gacutil.exe linha-por-linha e adiciona no ListView While Not gacSaida.EndOfStream Dim saida = gacSaida.ReadLine() ' Use o namespace System.Reflection.AssemblyName para ajudar no trabalho ' de parse da string de saida em valores desejados de Nome e Versão Try Dim asm As New AssemblyName(saida) If Not asm.Version = Nothing Then ' incluir no ListView Dim listViewItem As New ListViewItem(asm.Name) listViewItem.SubItems.Add(asm.Version.ToString()) Me.lstvAssemblies.Items.Add(listViewItem) End If Catch ex As Exception End Try End While ' Libera o recurso StreamReader gacSaida.Close() End Sub |
Este código realiza três tarefas básicas:
Executando projeto iremos obter o seguinte resultado:
Pegue o projeto completo aqui: ListaAssembliesGAC.zip
Mar 2:6
Ora, estavam ali sentados alguns dos escribas, que arrazoavam em seus corações, dizendo:Mar 2:7
Por que fala assim este homem? Ele blasfema. Quem pode perdoar pecados senão um só, que é Deus?Mar 2:8
Mas Jesus logo percebeu em seu espírito que eles assim arrazoavam dentro de si, e perguntou-lhes: Por que arrazoais desse modo em vossos corações?Mar 2:9
Qual é mais fácil? dizer ao paralítico: Perdoados são os teus pecados; ou dizer: Levanta-te, toma o teu leito, e anda?Mar 2:10
Ora, para que saibais que o Filho do homem tem sobre a terra autoridade para perdoar pecados ( disse ao paralítico ),Mar 2:11
a ti te digo, levanta-te, toma o teu leito, e vai para tua casa.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Exibindo o número da versão da sua aplicação - Macoratti.net