Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Este artigo fornece observações complementares à documentação de referência para esta API.
O InternalsVisibleToAttribute atributo especifica que os tipos que normalmente são visíveis apenas dentro do assembly atual são visíveis para um assembly específico.
Normalmente, tipos e membros com internal escopo em C# ou Friend escopo em Visual Basic são visíveis somente no assembly em que são definidos. Tipos e membros com protected internal escopo (Protected Friend escopo no Visual Basic) são visíveis somente na sua própria assembly ou a tipos que derivem da sua classe de contenção. Tipos e membros com private protected escopo (Private Protected escopo no Visual Basic) são visíveis na classe de contenção ou em tipos que derivam de sua classe de contenção dentro do assembly atual
O atributo InternalsVisibleToAttribute torna estes tipos e membros também visíveis para os tipos numa assembleia especificada, que é conhecida como uma assembleia amiga. Isso se aplica somente aos membros internal (Friend no Visual Basic), protected internal (Protected Friend no Visual Basic), e private protected (Private Protected no Visual Basic), mas não aos private.
Observação
No caso dos membros de private protected (Private Protected no Visual Basic), o atributo InternalsVisibleToAttribute estende a acessibilidade apenas a tipos que derivam da classe que contém o membro.
O atributo é aplicado no nível de montagem. Isso significa que ele pode ser incluído no início de um arquivo de código-fonte ou pode ser incluído no arquivo AssemblyInfo em um projeto do Visual Studio. Você pode usar o atributo para especificar um único conjunto de assemblagem amigo que pode acessar os tipos internos e membros do conjunto de assemblagem atual. Você pode definir várias montagens de amigos de duas maneiras. Eles podem aparecer como atributos individuais de nível de montagem, como ilustra o exemplo a seguir.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
Eles também podem aparecer com tags separadas InternalsVisibleToAttribute , mas uma única assembly palavra-chave, como ilustra o exemplo a seguir.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
A montagem amiga é identificada InternalsVisibleToAttribute pelo construtor. Tanto a assembleia atual quanto a assembleia amiga devem não estar assinadas, ou ambas as montagens devem ser assinadas com um nome forte.
Se ambos os assemblies não estiverem assinados, o assemblyName argumento consistirá no nome do assembly amigo, especificado sem um caminho de diretório ou extensão de nome de arquivo.
Se ambos os assemblies são assinados com um nome forte, o argumento para o InternalsVisibleToAttribute construtor deve consistir no nome do assembly sem seu caminho de diretório ou extensão de nome de arquivo, juntamente com a chave pública completa (e não seu token de chave pública). Para obter a chave pública completa de um assembly de nome forte, consulte a seção Obter a chave pública completa mais adiante neste artigo. Para obter mais informações sobre como usar InternalsVisibleToAttribute com assemblies de nome forte, consulte o InternalsVisibleToAttribute construtor.
Não inclua valores para o CultureInfocampo , Versionou ProcessorArchitecture no argumento, os compiladores Visual Basic, C# e C++ tratam isso como um erro do compilador. Se você usar um compilador que não o trate como um erro (como o IL Assembler (ILAsm.exe)) e os assemblies forem de nome forte, uma MethodAccessException exceção será lançada na primeira vez que o assembly amigo especificado acessar o assembly que contém o InternalsVisibleToAttribute atributo.
Para mais detalhes sobre como usar este atributo, consulte Assemblies Amigos e Assemblies Amigos C++.
Obtenha a chave pública completa
Você pode usar a Ferramenta de Nome Forte (Sn.exe) para recuperar a chave pública completa de um arquivo de chave de nome forte (.snk). Para fazer isso, execute as seguintes etapas:
Extraia a chave pública do ficheiro de chave com um nome forte num ficheiro separado:
Sn -p <snk_file> <outfile>Exiba a chave pública completa no console:
Sn -tp <outfile>Copie e cole o valor completo da chave pública no código-fonte.
Compile a montagem do amigo com C#
Se você usar o compilador C# para compilar o assembly friend, deverá especificar explicitamente o nome do arquivo de saída (.exe ou .dll) usando a opção de compilador /out . Isso é necessário porque o compilador ainda não gerou o nome para o assembly que está construindo no momento em que está vinculando a referências externas. A opção de compilador /out é opcional para o compilador do Visual Basic e a opção de compilador -out ou -o correspondente não deve ser usada ao compilar assemblies amigos com o compilador F#.
Compile o assembly amigo com C++
Em C++, para tornar os membros internos habilitados pelo atributo InternalsVisibleToAttribute acessíveis a um assembly amigo, deve-se usar o atributo as_friend na diretiva C++. Para obter mais informações, consulte Assemblies de amigos (C++).