Ich habe Baugruppe A, die (statisch) vom Typ T (Referenz-Typ, eine Klasse) in der Montage B.Wie bestimmt die .NET-Laufzeit, dass zwei Typen gleich sind?
I nicht besitzen Baugruppe A aber ich eigene Montag B. T Leider ist ein echter Typ (nicht hängt eine Schnittstelle), aber glücklicherweise verwendet A Reflexion, um seine Mitglieder zu entdecken.
Ich möchte in der Lage sein, dynamisch B (und T) zu erstellen. Der einzige wichtige Punkt ist, dass ich sicher sein muss, dass die dynamisch erzeugten "B und T" (nicht ihre Mitglieder) "äquivalent" sind zu denen, die statisch kompiliert wurden, als A kompiliert wurde.
- Ich kann Reflection Emit verwenden, um B und T zu erstellen. Kein Problem.
- kann ich B.dll auf die Festplatte
- schreiben Wenn A gegen diesen B.dll kompiliert wurde, dann kann ich dynamisch T ändern, kein Problem
- Allerdings, wenn A gegen ein Äquivalent kompiliert wurde (Hand geschrieben B und T) dann würde das T 'in A den gleichen Assemblynamen und Typnamen haben, aber es würde nicht als gleich dem dynamisch erzeugten betrachtet werden.
Ich nehme an, dass der Grund die GUID-Eigenschaft auf dem Typ ist. Wenn ich B.dll auf Platte schreibe, hat der T-Typ die gleiche GUID als die, die ich dynamisch erzeugen kann (selbst wenn ich seine Mitglieder ändere). Der handschriftliche Typ "ansonsten gleichwertig" teilt jedoch nicht die gleiche GUID.
Zusammenfassend ist die GUID die gleiche, wenn die DLL von der dynamisch erstellt stammt, ist aber anders als die eine statisch erstellt. Die GUID ist jedes Mal gleich (auch wenn ich neu kompiliere). Die GUID ist die gleiche, wenn ich den Inhalt des dynamischen Typs ändere.
Wie bestimmt die Laufzeit, ob zwei Typen gleich sind? Wie wird diese GUID erstellt? Es nutzt diese GUID und/oder etwas anderes? Ist es möglich, diese GUID in meiner Dimamic-Assembly der in Assembly A zuzuordnen?
Kann dieser GUID statisch untersucht werden (ich konnte es nicht mit Reflector oder ildasm sehen).
HINWEIS: Angenommen, Baugruppen sind nicht signiert.