A palavra-chave interna em C# pode tornar os métodos marcados, campos ou atributos disponíveis apenas dentro da montagem atual, então e se outros assemblies precisarem usar esse método interno? O .NET oferece uma forma de realizar essa função de forma semelhante à classe friend em C++, que é usar o InternalsVisibleTo.
Isso é comum ao fazer testes, e outro projeto é necessário para testar a funcionalidade marcada pelo método interno no projeto, então com o InternalsVisibleTo, não precisamos mudar um método que não deveria ser público para público para fazer testes unitários.
Ainda há algumas coisas para prestar atenção ao usar o InternalsVisibleTo, especialmente o PublicKey não é fácil de entender, vamos falar sobre como usar esse InternalsVisibleTo:
Vamos primeiro explicar a premissa: o Projeto1 é um projeto funcional, e o Projeto1. Teste (nome da assembleia: Project1.Test.dll) é um projeto de teste para o Projeto1.
1. Abra o arquivo Assembly.cs do Project1 e adicione esta frase ao final do arquivo:
PublicKey=****** deve ser substituído pela chave pública Project1.Test.dll, quanto a como obter a PublicKey, por favor, veja a seção Notas no final do artigo.
2. Verifique esse namespace: System.Runtime.CompilerServices é adicionado à referência do namespace da Assembly.cs, já que InternalsVisibleTo está localizado no namespace System.Runtime.CompilerService.
Notes:
1. Como eu obtenho uma Chave Pública?
R: Na linha de comando, use sn -tp Project1.Test.dll para ver PublicKey e PublicKeyToken
2. Se o Project1 for um projeto com nome forte, então o InternalsVisibleTo deve especificar uma Chave Pública, então o Project1.Test também deve usar uma assinatura forte para usar corretamente o InternalsVisibleTo, caso contrário a compilação cometerá um erro, caso contrário o Project1 não usar uma assinatura forte, Então o Project1.Test não precisa usar assinaturas fortes, e ao usar InternalsVisibleTo, apenas o nome da montagem é necessário, e não há necessidade de definir a PuklicKey. |