Assemblies no .NET

Os assemblies formam as unidades fundamentais de implantação, controle de versão, reutilização, ativação e permissões de segurança para . Aplicativos baseados em NET. Um assembly é uma coleção de tipos e recursos compilados para funcionar juntos e formar uma unidade lógica de funcionalidade. Os assemblies têm a forma de arquivos executáveis (.exe) ou biblioteca de vínculo dinâmico (.dll) e são os blocos de construção de aplicativos .NET. Eles oferecem ao Common Language Runtime as informações de que ele precisa para estar ciente das implementações de tipo.

No .NET e .NET Framework, você pode criar um assembly com base em um ou mais arquivos de código-fonte. No .NET Framework, os assemblies podem conter um ou mais módulos. Isso permite que projetos maiores sejam planejados para que vários desenvolvedores possam trabalhar em arquivos ou módulos de código-fonte separados, que são combinados para criar um único assembly. Para obter mais informações sobre módulos, consulte Como criar um assembly de vários arquivos.

Os assemblies têm as seguintes propriedades:

  • Os assemblies são implementados como.exe ou .dll arquivos.

  • Para bibliotecas que se .NET Framework, você pode compartilhar assemblies entre aplicativos colocando-os no GAC (cache de assembly global). Você deve ter assemblies de nome forte antes de incluí-los no GAC. Para obter mais informações, consulte Assemblies de nome forte.

  • Os assemblies serão carregados na memória somente se forem necessários. Se eles não são usados, eles não são carregados. Isso significa que os assemblies podem ser uma maneira eficiente de gerenciar recursos em projetos grandes.

  • Você pode obter informações programaticamente sobre um assembly usando reflexão. Para obter mais informações, confira Reflexão (C#) ou Reflexão (Visual Basic).

  • Você pode carregar um assembly apenas para inspecioná-lo usando MetadataLoadContext a classe no .NET e .NET Framework. MetadataLoadContext substitui os Assembly.ReflectionOnlyLoad métodos .

Assemblies no Common Language Runtime

Os assemblies fornecem ao Common Language Runtime as informações necessárias para estar ciente das implementações de tipo. Para o runtime, um tipo não existe fora do contexto de um assembly.

Um assembly define as seguintes informações:

  • Código que o Common Language Runtime executa. Observe que cada assembly pode ter apenas um ponto de entrada: DllMain WinMain , ou Main .

  • Limite de segurança. Um assembly é a unidade na qual as permissões são solicitadas e concedidas. Para obter mais informações sobre limites de segurança em assemblies, consulte Considerações de segurança do assembly.

  • Limite de tipo. A identidade de cada tipo inclui o nome do assembly no qual ele reside. Um tipo chamado MyType, carregado no escopo de um assembly, não é o mesmo de um tipo chamado MyType, carregado no escopo de outro assembly.

  • Limite de escopo de referência. O manifesto do assembly tem metadados usados para resolver tipos e atender a solicitações de recursos. O manifesto especifica os tipos e recursos a expor fora do assembly e enumera outros assemblies dos quais ele depende. O código MSIL (Microsoft Intermediate Language) em um arquivo PE (executável portátil) não será executado, a menos que tenha um manifesto de assembly associado.

  • Limite de versão. O assembly é a menor unidade com versão no Common Language Runtime. Todos os tipos e recursos no mesmo assembly têm a versão de uma unidade. O manifesto do assembly descreve as dependências de versão que você especifica para todos os assemblies dependentes. Para obter mais informações sobre o versioning, consulte Versão do assembly.

  • Unidade de implantação. Quando um aplicativo é iniciado, somente os assemblies que o aplicativo chama inicialmente devem estar presentes. Outros assemblies, como assemblies que contêm recursos de localização ou classes de utilitário, podem ser recuperados sob demanda. Isso permite que os aplicativos sejam simples e finos quando baixados pela primeira vez. Para obter mais informações sobre como implantar assemblies, consulte Implantar aplicativos.

  • Unidade de execução lado a lado. Para obter mais informações sobre como executar várias versões de um assembly, consulte Assemblies e execução lado a lado.

Criar um assembly

Assemblies podem ser estáticos ou dinâmicos. Assemblies estáticos são armazenados em disco em arquivos PE. Assemblies estáticos podem incluir interfaces, classes e recursos, como bitmaps, arquivos JPEG e outros arquivos de recurso. Você também pode criar assemblies dinâmicos, que são executados diretamente da memória e não são salvos no disco antes da execução. Você pode salvar assemblies dinâmicos em disco após sua execução.

Existem várias maneiras de criar assemblies. Você pode usar ferramentas de desenvolvimento, como Visual Studio, que podem criar.dllou .exe arquivos. Você pode usar ferramentas no SDK Windows para criar assemblies com módulos de outros ambientes de desenvolvimento. Você também pode usar APIs do Common Language Runtime, como System.Reflection.Emit, a fim de criar assemblies dinâmicos.

Compile assemblies compilando-os no Visual Studio, compilando-os com ferramentas de interface de linha de comando do .NET Core ou criando assemblies .NET Framework com um compilador de linha de comando. Para obter mais informações sobre como criar assemblies usando a CLI do .NET, consulte Visão geral da CLI do .NET.

Observação

Para criar um assembly no Visual Studio, no menu Build, selecione Criar.

Manifesto do assembly

Cada assembly tem um arquivo de manifesto do assembly. Semelhante a um tabela de conteúdo, o manifesto do assembly contém:

  • A identidade do assembly (seu nome e versão).

  • Uma tabela de arquivos que descreve todos os outros arquivos que comem o assembly, como outros assemblies criados que o arquivo .exe ou .dll se baseia, arquivos bitmap ou arquivos Leiame.

  • Uma lista de referência de assembly , que é uma lista de todas as dependências externas, como.dlls ou outros arquivos. As referências de assembly contêm referências a objetos globais e privados. Os objetos globais estão disponíveis para todos os outros aplicativos. No .NET Core, os objetos globais são atados a um runtime específico do .NET Core. No .NET Framework, os objetos globais residem no GAC (cache de assembly global). System.IO.dll é um exemplo de um assembly no GAC. Objetos privados devem estar em um nível de diretório no diretório ou abaixo do diretório no qual seu aplicativo está instalado.

Como os assemblies contêm informações sobre conteúdo, controle de versão e dependências, os aplicativos que os usam não precisam depender de fontes externas, como o registro em sistemas Windows, para funcionar corretamente. Os assemblies reduzem.dll conflitos e facilitam a implantação de seus aplicativos. Em muitos casos, você pode instalar um aplicativo baseado em .NET simplesmente copiando seus arquivos para o computador de destino. Para obter mais informações, consulte Manifesto do assembly.

Adicionar uma referência a um assembly

Para usar um assembly em um aplicativo, você deve adicionar uma referência a ele. Depois que um assembly é referenciado, todos os tipos acessíveis, propriedades, métodos e outros membros de seus namespaces estão disponíveis para seu aplicativo como se o código fosse parte do arquivo de origem.

Observação

A maioria dos assemblies da Biblioteca de Classes .NET é referenciada automaticamente. Se um assembly do sistema não for referenciado automaticamente, adicione uma referência de uma das seguintes maneiras:

  • Para .NET e .NET Core, adicione uma referência ao pacote NuGet que contém o assembly. Use o NuGet Gerenciador de Pacotes em Visual Studio ou adicione um elemento para o assembly ao <PackageReference> projeto .csproj ou .vbproj.
  • Por .NET Framework, adicione uma referência ao assembly usando a caixa de diálogo Adicionar Referência no Visual Studio ou usando a opção de linha de comando para os -reference compiladores C# ou Visual Basic.

No C#, você pode usar duas versões do mesmo assembly em um único aplicativo. Para obter mais informações, consulte alias externo.

Título Descrição
Conteúdos do assembly Elementos que comem um assembly.
Manifesto do assembly Dados no manifesto do assembly e como eles são armazenados em assemblies.
Cache de assembly global Como o GAC armazena e usa assemblies.
Assemblies de nome forte Características de assemblies de nome forte.
Considerações sobre a segurança do assembly Como funciona a segurança com assemblies.
Controle de versão do assembly visão geral da política de controle de versão do .NET Framework.
Posicionamento do assembly Onde localizar os assemblies.
Assemblies e execução lado a lado Use várias versões do tempo de execução ou um assembly simultaneamente.
Emissão de métodos e assemblies dinâmicos Como criar assemblies dinâmicos.
Como o tempo de execução localiza assemblies como o .NET Framework resolve referências de assembly em tempo de execução.

Referência

System.Reflection.Assembly

Confira também