Ophalen van een public key van een snk file t.b.v. InternalsVisibleTo

Soms is het nodig/wenselijk om de ‘internals’ van een assembly te zien. In de meeste scenario’s is het voldoende om de publieke API te gebruiken. Maar soms, zoals in test assemblies wil je ook toegang tot interne routines. Daartoe bestaat de mogeljkheid om dit te doen via een InternalsVisibleTo attibuut zoals:

[assembly: InternalsVisibleTo("Friend1, PublicKey=0025000d0480000094" + 
                              "3d2729967c3184a97d7b84c7547cd87e435b5" +
                              "0000000602000000240000525341310004000" +
                              "001000100bf8c25fcd44838d87e245ab35bf7" +
                              "3ba2615707feea295709559b3de903fb95a93" +
                              "712da72eec2533dc00f8529c3a0bbb4103282" +
                              "f0d894d5f34e9f0103c473dce9f4b457a5dee" +
                              "fd8f920d8681ed6dfcb0a81e96bd9b176525a" +
                              "2aedb4")]

public class SomeClass
{

Hiermee geef je dus een andere assembly, ‘friend1’ toegang tot de interne routines van SomeClass.

Maar hoe krijg je de public key van je ‘friend’ assembly? Deze moet dus digitaal ondertekend zijn (een .snk file in visual studio). Je hebt dus deze file, maar dan?

De eerste stap is om de public key uit de .snk file te halen. Als je visual studio gebruikt is het eenvoudig. Open een terminal window via de menu optie ‘view terminal’. Dit opent een ‘developer powershell’ window, waardoor het nodige tool, sn.exe meteen beschikbaar is.

sn.exe -p <uw.snk> mypk.key

De tweede stap is om hiervan de output de genereren die je kan gebruiken:

sn.exe -pt mypk.key

Dit geeft output op je scherm in een paar regels. Zet alles netjes achter elkaar en je hebt je public key.