Feedback

InternalsVisibleTo

Sprache: C#

Besonders beim Erstellen von UnitTests muss man hin- und wieder mal auf private oder als internal markierte Typen (Klassen, Strukturen, Enumerationen, Schnittstellen) zugreifen. Aus Sicht der Programmiersprache ist das weder vorgesehen noch möglich. Mit dem hier gezeigten Attribut für die Assembly aber schon. Dieses muss einfach irgendwo im Projekt hinein gesetzt werden, am besten aber in der AssemblyInfo.cs/.vb. Dadurch wird alles innerhalb der Assembly für die angegebene sozusagen "öffentlich".
//wenn TestAssembly nicht signiert ist:
[assembly: InternalsVisibleTo("TestAssembly")]

//wenn TestAssembly signiert ist:
//TODO: MYPUBLICKEY mit dem öffentlichen Schlüssel des Zertifikats ersetzen
[assembly: InternalsVisibleTo("TestOtherAssembly, PublicKey=MYPUBLICKEY")]
//wenn TestAssembly nicht signiert ist:
[assembly: InternalsVisibleTo("TestAssembly")]

//wenn TestAssembly signiert ist:
//TODO: MYPUBLICKEY mit dem öffentlichen Schlüssel des Zertifikats ersetzen
[assembly: InternalsVisibleTo("TestOtherAssembly, PublicKey=MYPUBLICKEY")]

2 Kommentare

  1. Soweit ich weiß ist das PrivateObject für den Zugriff auf private Member geeignet, aber nicht für den Zugriff auf private Typen. Man könnte hier natürlich auch per Reflection drauf zugreifen, nur ist das unnötig Fehleranfällig und auch nicht sonderlich effizient. Daher finde ich InternalsVisibleTo für diese Zwecke gar nicht so schlecht.