Het interne sleutelwoord in C# kan de gemarkeerde methoden, velden of attributen alleen binnen de huidige assembly beschikbaar maken, dus wat als andere assemblies deze interne methode moeten gebruiken? .NET biedt een manier om deze functie uit te voeren, vergelijkbaar met de friendclass in C++, namelijk het gebruik van InternalsVisibleTo.
Dit komt vaak voor bij tests, en er is een ander project nodig om de functionaliteit te testen die door de interne methode in het project wordt gemarkeerd, dus met InternalsVisibleTo hoeven we een methode die niet openbaar zou moeten zijn niet te veranderen naar publiek om unit testing te kunnen uitvoeren.
Er zijn nog steeds enkele zaken om op te letten bij het gebruik van InternalsVisibleTo, vooral omdat PublicKey niet makkelijk te begrijpen is, laten we het hebben over hoe je dit InternalsVisibleTo gebruikt:
Laten we eerst het uitgangspunt uitleggen: Project1 is een functioneel project, en Project1.Test (assembleenaam: Project1.Test.dll) is een testproject voor Project1.
1. Open het Assembly.cs-bestand van Project1 en voeg deze zin toe aan het einde van het bestand:
PublicKey=****** moet worden vervangen door de Project1.Test.dll publieke sleutel; om de PublicKey te verkrijgen, zie het gedeelte Notities aan het einde van het artikel.
2. Controleer dat namespace: System.Runtime.CompilerServices wordt toegevoegd aan de namespace-referentie van de Assembly.cs, aangezien InternalsVisibleTo zich bevindt in de namespace System.Runtime.CompilerService.
Notes:
1. Hoe krijg ik een PublicKey?
A: Gebruik onder de opdrachtregel sn -tp Project1.Test.dll om PublicKey en PublicKeyToken te zien
2. Als Project1 een project met een sterke naam heeft, moet InternalsVisibleTo een PublicKey specificeren, dus moet Project1.Test ook een sterke handtekening gebruiken om InternalsVisibleTo correct te gebruiken, anders maakt de compilatie een fout als Project1 geen sterke handtekening gebruikt, Dan hoeft Project1.Test geen sterke handtekeningen te gebruiken, en bij gebruik van InternalsVisibleTo is alleen de naam van de assembly vereist, en is het niet nodig om de PuklicKey in te stellen. |