domingo, 22 de dezembro de 2013

Compreendendo Assemblies no .NET Framework

Assemblies: São uma coleção de tipos e recursos que formam uma unidade lógica de funcionalidade, todos os tipos no .Net Framework precisam existir em um Assembly, o CLR (Common Language runtime) não suporta tipos fora de um Assembly, toda vez que construímos um projeto, seja ele Class Library, Windows Service, ou qualquer outra aplicação com o .Net Framework estamos construindo um assembly. Cada assembly é armazenado em um .exe ou em uma .dll.

O .Net framework usa os assemblies como unidade fundamental para diversos fins:

·         Segurança
·         Type Identity
·         Escopo de Referencia (Reference Scope)
·         Versionamento
·         Deployment

Segurança:
Os assemblies são a unidade que contém as permissões de segurança, e elas são requisitadas e concedidas, são também o nível que você estabelece a identidade e confiabilidade.
O .NET Framework habilita dois mecanismos para este nível de segurança do Assembly:
Strong Names e Signcode.exe.
Strong Names: Ao assinar um Assembly com Strong Name é adicionado uma chave pública (public key) de encriptação para o assembly. Isto assegura que o nome de seu assembly será único e previne a substituição por qualquer outro assembly com o mesmo nome.
                Signcode.exe:  Permite incorporar um certificado digital ao assembly.  Isto permite aos usuários do mesmo verificar a identidade do assembly.

Type Identity:
A identidade de um assembly depende do assembly onde foi definido, isto é, se você define um tipo chamado DataStore em um assembly, e um tipo chamado DataStore em outro assembly, o .NET Framework poderá trabalhar com ambos, pois eles estão em locais diferentes, em outras palavras, você não pode definir dois tipos diferentes com o mesmo nome no mesmo assembly.

Escopo de Referencia (Reference Scope):
O Assembly também é o local de referências de informações gerais, cada assembly contém informações de referência das seguintes formas:
·         O assembly contém Metadata que especifica os tipos e recursos dentro do assembly que são expostos aos códigos de fora. Por exemplo um assembly pode expor um tipo público chamado Customer com uma propriedade pública chamada AccountBalance.
·         O assembly contém em seu Metadata a especificação de outros assemblies no qual depende. Por exemplo, um assembly pode especificar que depende do System.Windows.Forms.dll

Versioning:
Cada assembly tem um número de versão 128 bits que é representado em 4 partes decimais na forma de Major.Minor.Build.Revision
Exemplo: 3.5.0.126
Isto serve para que seja evitado o antigo DLL HELL, pois sempre que os desenvolvedores realizavam um update na dll muitos problemas ocorriam, afinal gerava incompatibilidade das versões e muita coisa parava de funcionar dando muita dor de cabeça.
Com o versionamento do assembly cada programa aponta para a versão testada do assembly e podem viver em harmonia com outras versões do assembly, pois ele irá utilizar a versão testada e compatível deixando assim os desenvolvedores livres para gerar novas versões.
Os upgrades de uma aplicação travavam outras, com o versionamento isto acabou, um programa pode usar a versão “Y” do assembly e outros programas a versão “X”.

Deployment:
Os assemblyes são uma unidade natural do deployment, você pode fazer deploy de seus assemblies de diversas formas incluindo um simples xCopy ou download via website.
Quando você inicia sua aplicação, ela carrega outros assemblies e recursos que o seu assembliy necessita.

Assembly Manifest
Por último mas não menos importante o assembly manifest, este cara contém os metadados com informações sobre seu assembly, ele contém os seguintes items:

·         O nome do assembly e a versão
·         A cultura ou linguagem que o assembly suporta (não é obrigatório)
·         A chave pública (public key) para qualquer strong name assinado no assembly (não é obrigatório)
·         Informações de assemblies referenciados
·         Uma lista de arquivos no assembliy com informações em uma lista de hash

·         Informações de tipos exportados

Nenhum comentário:

Postar um comentário