Einführung in die Youyuan-Versammlung Wir wissen, dass Mitglieder einer Klasse, die als intern definiert sind (einschließlich Typen, Methoden, Eigenschaften, Variablen, Ereignissen), nur in derselben Assembly zugänglich sind (natürlich spreche ich hier von der normalen Methode, ohne Zugriff über Reflexion). Diese Regel ist in . .NET 2.0 ist leicht kaputt, sodass wir die internen Mitglieder einer Assembly so einstellen, dass sie von bestimmten Mitgliedern zugänglich sind. Wir nennen die Assembly, die diese internen Mitglieder enthält, die Quell-Assembly, und die Assembly-Menge heißt Friend-Assembly.
Verwendung der Freundschaftsmontage Dieses Attribut wird auf Assemblerebene verwendet.
So kann das FriendAssembly-Programm, nachdem es auf die Assembler referenziert hat, auf die interne Name-Eigenschaft zugreifen. Im Allgemeinen ist diese Assembly:InternalsVisibleTo("FriendAssembly") besser im AssemblyInfo.cs platziert, schließlich ist sie auf Assembly-Ebene.
Wann man InternalsToVisibleTo verwenden sollte Tatsächlich wird dieses Attribut in allgemeinen Anwendungen nicht verwendet, und wir sollten es nicht missbrauchen. Denn im Allgemeinen muss eine gut gestaltete Baugruppe nicht offen für die Außenwelt sein. Aber Unit-Test-Szenarien können diese Funktion nutzen. Mit dieser Funktion können wir festlegen, dass der Code für Unit-Tests Zugriff auf diese internen Mitglieder hat, damit wir diese Mitglieder unit-testen können. Dies erfordert jedoch, dass der Name der Friend-Assembly in die Quell-Assembly eingeschrieben wird, was einige Sicherheitsprobleme verursacht. Sicherheit kann durch die Einführung von Signatur-Assemblies gewährleistet werden.
InternalsToVisibleTo und die Signatur-Assembly Du kannst direkt den Namen und den öffentlichen Schlüssel der Friend-Meta-Assembly in InternalsVisibleTo angeben. Verwenden Sie die VS-Entwickler-Kommandozeile, um den öffentlichen Schlüssel für FriendAssembly zu generieren:
Gib den Namen der Friend-Assembly und den öffentlichen Schlüssel der Quell-Assembly an:
Tatsächlich, da die Friend-Assembly auf die Quell-Assembly referenziert, und die signierte Assembly auf eine unsignierte Assembly, und die signierte Assembly keine unsignierte Friend-Assembly angeben kann, sind alle davon signiert, also müssen sie signiert werden.
|