Wenn IL Dynamic möglich, es ist mit Erzeugung Methoden aufrufen und den Zugang Felder, die sonst un-zugänglich sein würde, wenn Sie in dem ich lieber wäre Ist es möglich, Sichtbarkeitsprüfungen zu überspringen, wenn eine dynamische IL mit MethodBuilder generiert wird?
DynamicMethod constructor ‚true‘ für den restrictedSkipVisibility Parameter eine dynamische IL in eine dynamische Anordnung emittieren Stattdessen kann ich die generierte IL zur Build-Zeit in eine Assembly speichern. Wenn ich diese Methode verwende, muss ich einen MethodBuilder anstelle von DynamicMethod verwenden. Allerdings muss ich Sichtbarkeitsprüfungen überspringen können, damit ich MethodAccessException nicht bekomme, wenn ich meinen dynamischen Code ausführe. Gibt es einen Weg dies zu tun und wenn ja wie?
12
A
Antwort
2
Wenn Sie MethodBuilder in dynamischen Assemblys verwenden, sind Sie an dieselben Regeln gebunden wie die vom Compiler generierten Assemblys. Die Sichtbarkeit zwischen den Baugruppen wird also bestimmt durch:
- Das ReflectionPermission Attribut.
- Das InternalsVisibleTo Attribut.
Bitte lesen Sie die Dokumentation und die Beispiele, um zu sehen, ob es Ihren Bedürfnissen entsprechen könnte.
0
Wenn Sie Ihren generierten Code per Schnittstelle anstelle von delegate materialisieren müssen, wird il nützlich sein, um skipVisibilityCheck für einen Methodbuilder. Ich habe keine Möglichkeit gefunden, es direkt zu tun, aber Sie können eine DynamicMethod in Ihrem MethodBuilder einfach aufrufen, indem Sie EmitCalli (OpCodes.Calli ...) verwenden.
Ist dieses Problem gelöst? Kannst du kurz beschreiben, wie du es gelöst hast? – kizzx2
Nein. Soweit ich das beurteilen kann, ist es nicht lösbar. Am Ende habe ich einen anderen Ansatz für die Lösung gewählt, indem ich die Mono.Cecil-Bibliothek verwendet habe, um die Assembly neu zu schreiben. Auf diese Weise konnte ich auf private oder interne Mitglieder zugreifen, ohne gegen die Sicherheitsregeln zu verstoßen. Mit dieser Methode konnte ich jedoch nicht erreichen, dass die Symbole korrekt mit den Quelldateien übereinstimmten, was zu anderen Störungen führte. –