Cuvântul cheie intern din C# poate face ca metodele, câmpurile sau atributele marcate să fie disponibile doar în ansamblarea curentă, deci ce se întâmplă dacă alte asamblări trebuie să folosească această metodă internă? .NET oferă o modalitate de a realiza această funcție similar clasei friend din C++, care este să folosești InternalsVisibleTo.
Acest lucru este comun la teste, iar un alt proiect este necesar pentru a testa funcționalitatea marcată de metoda internă în proiect, astfel încât cu InternalsVisibleTo nu trebuie să schimbăm o metodă care nu ar trebui să fie publică la public pentru a face testare unitară.
Mai sunt încă câteva aspecte la care trebuie să fii atent când folosești InternalsVisibleTo, în special faptul că PublicKey nu este ușor de înțeles, hai să vorbim despre cum să folosești acest InternalsVisibleTo:
Să explicăm mai întâi premisa: Proiectul 1 este un proiect funcțional, iar Proiectul 1. Test (numele asamblării: Project1.Test.dll) este un proiect de test pentru Proiectul 1.
1. Deschide fișierul Assembly.cs din Project1 și adaugă această propoziție la finalul fișierului:
PublicKey=****** ar trebui înlocuit cu Project1.Test.dll cheia publică; pentru modul de a obține PublicKey, vă rugăm să consultați secțiunea Note de la finalul articolului.
2. Verificați acel spațiu de nume: System.Runtime.CompilerServices este adăugat la referința spațiului de nume a Assembly.cs, deoarece InternalsVisibleTo se află în spațiul de nume System.Runtime.CompilerService.
Notes:
1. Cum obțin un PublicKey?
R: În linia de comandă, folosește sn -tp Project1.Test.dll pentru a vedea PublicKey și PublicKeyToken
2. Dacă Project1 este un proiect cu nume puternic, atunci InternalsVisibleTo trebuie să specifice o PublicKey, astfel încât Project1.Test trebuie să folosească și o semnătură puternică pentru a folosi corect InternalsVisibleTo, altfel compilarea va produce o eroare dacă Proiect1 nu folosește o semnătură puternică, Atunci Project1.Test nu trebuie să folosească semnături puternice, iar când se folosește InternalsVisibleTo, este necesar doar numele asamblării și nu este nevoie să se seteze PuklicKey. |