Montagem de amigos

Definição – O que significa Friend Assembly?

Um assembly amigo, em C #, refere-se ao assembly .NET que pode acessar os membros de outro assembly. Os membros em uma montagem que são acessados ​​a partir de uma montagem amiga precisam ser marcados como
interno.

Os assemblies amigos são usados ​​em cenários onde há necessidade de acessar classes internas e membros em um assembly de outro assembly específico. Ele permite que dois assemblies específicos compartilhem membros ou funcionalidade sem torná-los públicos.

Os assemblies amigos também são usados ​​em testes de unidade em que o assembly subjacente ao código de teste precisa acessar os membros marcados como internos no assembly a ser testado. É útil no desenvolvimento de bibliotecas de classes que requerem adições contidas em assemblies separados que precisam acessar membros em assemblies existentes.

Definirtec explica Friend Assembly

Ao marcar os membros de uma classe como internos, eles ficam visíveis para outras classes dentro da mesma montagem, mas são privados para as classes que residem fora da montagem. Para acessar os membros internos de uma montagem amiga, o nome da montagem amiga deve ser especificado com o atributo InternalsVisibleToAttribute na montagem onde os membros internos são definidos. A montagem amiga não pode acessar tipos privados e membros privados.

Por exemplo, InternalsVisibleToAttribute na Montagem X pode ser usado para especificar a Montagem Y como montagem amiga, de forma que a Montagem Y possa acessar todos os tipos e membros da Montagem X marcados como internos.

A seguir estão as diretrizes relacionadas ao desenvolvimento de assemblies amigos:

  • Ao usar assemblies assinados, a ferramenta ‘sn.exe’ pode ser usada para obter a chave pública que deve ser passada para o atributo que especifica o assembly amigo
  • Ao compilar um assembly amigo que acessa membros internos de outro assembly, a opção do compilador (/ out) deve ser definida com o nome do arquivo de saída (.exe ou .dll)
  • É necessário especificar explicitamente cada assembly que precisa ser amigo do assembly ao qual ele precisa de acesso
  • É sugerido usar assemblies amigáveis ​​sem quebrar as regras de encapsulamento

Esta definição foi escrita no contexto de C #