Starke Benennung wird zusammen mit einem "öffentlichen Schlüssel-Token" verwendet, um eine Baugruppe vollständiger Anzeigename (mscorlib, version=2.0.0.0, Culture=neutral, PublicKeyToken=b4778,.....
) zu erstellen. Dies ermöglicht uns, mehrere Versionen derselben Baugruppe nebeneinander innerhalb desselben Anwendungsverzeichnisses zu haben.
Ein Token für öffentliche Schlüssel (und damit String-Benennungstechnik) ermöglicht es dem .NET-Loader außerdem, festzustellen, ob jemand seit der Verteilung Ihrer Assembly-Inhalte manipuliert hat. Dies ist der Fall, denn wenn Sie eine Assembly mit Ihrem "privaten Token" signieren, generiert der Compiler einen Hashwert, der in die Assemblymetadaten eingebettet wird, die den öffentlichen Teil Ihres "privaten Tokens" beschreiben. Der Lader kann diesen Wert dann verwenden, um festzustellen, ob Ihre Baugruppe geändert wurde.
Bezüglich Lösung Baugruppen gibt es ein paar grundlegende Dinge zu beachten:
Probing Der Lader versucht Baugruppen zu finden, ein Basisverzeichnis „Sondierung“ -Technik. Dies bedeutet, dass es versucht, "MyAssembly.dll
" (zum Beispiel) im Startverzeichnis der Anwendung zu finden, wenn nicht dort, dann in Unterverzeichnissen darunter. Wenn das Prüfen nicht "MyAssembly.dll
" findet, wird das AppDomain
AssemblyResolve
Ereignis ausgelöst.
Maschine/Benutzer/Systemkonfiguration Die machine.config
, user.config
und system.config
werden Konfigurationsdateien lokal auf dem System gespeichert, die man verwenden kann, um das Verhalten der Baugruppe Resolver auf einer „Maschine“ zu ändern, „user“ oder Systemweite Einstellung
Verlag Politik Ein Ihre Anwendung die „<assemblyIdentity>
“ XML-Token in der Konfigurationsdatei (zum Beispiel „MyApp.exe.config
“) verwenden kann, um eine bestimmte Version einer Assembly an Resolver-zu-Punkt oder eine Baugruppe von einem laden anderer Ort.
Benutzerdefinierte Auflösung Behandeln Sie das "AssemblyResolve
" Ereignis des AppDomain
. Dieses Ereignis wird ausgelöst, wenn eine Versammlung nicht über „traditionelle“ Methoden aufgelöst werden konnte
Die mit Abstand am wenigsten komplizierte Mechanismus ist die „AssemblyResolve“ Ereignis zu behandeln.
Zusammenfassend sucht der Resolver im aktuellen Verzeichnis oder im globalen Assemblycache, verarbeitet die Richtlinie und ermöglicht schließlich die benutzerdefinierte Auflösung.
"ermöglicht es dem .NET-Loader zu erkennen, ob irgendjemand Ihren Assembly-Inhalt manipuliert hat ...". –
Sicher. Wenn Sie Ihre Assembly mit einem starken Namen-Hashwert kompilieren (Sie können auch das Befehlszeilendienstprogramm "sn.exe" verwenden), wird der Hashwert grundsätzlich in die Metadaten der Assembly geschrieben, die die Version, die Kultur, den Namen und den Tokenwert beschreibt. Wenn der Loader Ihre Assembly lädt, überprüft er, ob Ihre Assembly über ein Token mit öffentlichem Schlüssel verfügt. Wenn dies der Fall ist, wird der gleiche Hashalgorithmus für die Assembly verwendet, verglichen mit den Metadaten der Assembly und nicht geladen. So erkennt das geladene Gerät "Sabotage". Es ist sehr begrenzt, wie Sie sehen können, aber ausreichend für jetzt. –
Auf der Oberfläche sieht es nach einer Möglichkeit aus, unseren .NET-Code zu schützen. Aber die Aufregung vergeht schnell und Sie werden bald feststellen, dass Verschleierung die nächstbeste Sache ist. –