Das interne Schlüsselwort in C# kann die markierten Methoden, Felder oder Attribute nur innerhalb der aktuellen Assembly verfügbar machen, also was, wenn andere Assemblies diese interne Methode verwenden müssen? .NET bietet eine Möglichkeit, diese Funktion ähnlich der Friend-Klasse in C++ zu erfüllen, nämlich InternalsVisibleTo zu verwenden.
Das ist bei Tests üblich, und ein weiteres Projekt wird benötigt, um die Funktionalität zu testen, die durch die interne Methode im Projekt markiert ist, sodass wir mit InternalsVisibleTo eine Methode, die nicht öffentlich sein sollte, nicht auf öffentlich umstellen müssen, um Unit-Tests durchzuführen.
Es gibt immer noch einige Dinge, auf die man achten sollte, wenn man InternalsVisibleTo verwendet, insbesondere ist PublicKey nicht leicht zu verstehen. Lassen Sie uns darüber sprechen, wie man dieses InternalsVisibleTo verwendet:
Erklären wir zunächst die Prämisse: Projekt1 ist ein funktionales Projekt, und Projekt1.Test (Assemblername: Project1.Test.dll) ist ein Testprojekt für Projekt1.
1. Öffne die Assembly.cs-Datei von Project1 und füge diesen Satz am Ende der Datei hinzu:
PublicKey=****** sollte durch den Project1.Test.dll Public Key ersetzt werden; wie man den PublicKey bekommt, siehe bitte den Abschnitt Anmerkungen am Ende des Artikels.
2. Überprüfen Sie, dass der Namensraum: System.Runtime.CompilerServices zur Namensraumreferenz des Assembly.cs hinzugefügt wird, da sich InternalsVisibleTo im Namensraum System.Runtime.CompilerService befindet.
Notes:
1. Wie bekomme ich einen PublicKey?
A: Verwenden Sie unter der Kommandozeile sn -tp Project1.Test.dll, um PublicKey und PublicKeyToken zu sehen
2. Wenn Project1 ein stark benanntes Projekt ist, muss InternalsVisibleTo einen PublicKey angeben, daher muss Project1.Test ebenfalls eine starke Signatur verwenden, um InternalsVisibleTo korrekt zu verwenden, andernfalls macht die Kompilierung einen Fehler, wenn Project1 keine starke Signatur verwendet, Dann muss Project1.Test keine starken Signaturen verwenden, und bei Verwendung von InternalsVisibleTo wird nur der Name der Assembly benötigt, und es ist nicht nötig, PuklicKey einzustellen. |