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