La parola chiave interna in C# può rendere disponibili i metodi, i campi o gli attributi marcati solo all'interno dell'assembly corrente, quindi cosa succede se altri assembly devono usare questo metodo interno? .NET offre un modo per eseguire questa funzione in modo simile alla classe friend in C++, ovvero l'uso di InternalsVisibleTo.
Questo è comune durante i test, e serve un altro progetto per testare la funzionalità contrassegnata dal metodo interno nel progetto, quindi con InternalsVisibleTo non dobbiamo cambiare un metodo che non dovrebbe essere pubblico a pubblico per poter fare test unitari.
Ci sono ancora alcune cose a cui prestare attenzione quando si usa InternalsVisibleTo, soprattutto PublicKey non è facile da capire, parliamo di come usare questo InternalsVisibleTo:
Spieghiamo prima la premessa: il Progetto1 è un progetto funzionale, e il Progetto1. Test (nome assembly: Project1.Test.dll) è un progetto di prova per il Progetto1.
1. Apri il file Assembly.cs di Project1 e aggiungi questa frase alla fine del file:
PublicKey=****** dovrebbe essere sostituito con la chiave pubblica Project1.Test.dll, per quanto riguarda come ottenere la PublicKey, si prega di consultare la sezione Note alla fine dell'articolo.
2. Verifica che questo namespace: System.Runtime.CompilerServices viene aggiunto al riferimento dello spazio dei nomi della Assembly.cs, poiché InternalsVisibleTo si trova nello spazio di nomi System.Runtime.CompilerService.
Notes:
1. Come posso ottenere una PublicKey?
R: Nella riga di comando, usa sn -tp Project1.Test.dll per vedere PublicKey e PublicKeyToken
2. Se Project1 è un progetto con un nome forte, allora InternalsVisibleTo deve specificare una PublicKey, quindi Project1.Test deve anche usare una firma forte per usare correttamente InternalsVisibleTo, altrimenti la compilazione commetterà un errore, se Project1 non usa una firma forte, Allora Project1.Test non deve usare firme forti, e quando si usa InternalsVisibleTo, è necessario solo il nome dell'assemblaggio, e non è necessario impostare la PuklicKey. |