Ich portiere Code, der DynamicMethod
s ausgiebig verwendet, um Vorkompilierung zu ermöglichen, für bessere kalte Startleistung. Ich habe bemerkt, dass DynamicMethod
s JITted und ausgeführt werden kann mit Sichtbarkeitsüberprüfungen übersprungen, was ihnen erlaubt, auf private verschachtelte Typen zuzugreifen, aber normale Assemblys können nicht (oder können sie nicht? Ich sehe keine offensichtliche Loader-Option). Was ist der Grund für diese Designentscheidung?Warum ist das Überspringen von Sichtbarkeitsüberprüfungen nur für dynamische Methoden zulässig?
Antwort
Ich muss meine Hände ein wenig winkend diese Frage beantworten, CAS ist für immer kompliziert. Das Argument skipVisibility ist für vertrauenswürdige Hostanwendungen relevant, die Code generieren, der in einer Sandbox ausgeführt wird. In einem solchen Fall ist es nicht angemessen, bei der Generierung der Methode Prüfungen durchzuführen, da die Ausführungsumgebung falsch ist. Es muss passieren, wenn die Methode innerhalb der Sandbox ausführt. Wo es den normalen CAS-Prüfungen durch die Sandbox unterzogen wird.
Wenn das Argument in der Tat auf 0 gesetzt ist, fügt eine Berechtigungsanforderung für ReflectionPermissionFlag.MemberAccess hinzu, die erforderlich ist, um die Methode generieren zu lassen.
Drunter und drüber. Es gibt einige Hintergrundinformationen in this MSDN article, "Hinzufügen von RestrictedMemberAccess zu Sandboxed Domains" Abschnitt.
- 1. Warum sind nur öffentliche Methoden in einer Schnittstelle zulässig?
- 2. Warum ist das Unterklassifizieren für viele SWT-Steuerelemente nicht zulässig?
- 3. Warum sind Array-Initialisierungen nur für Arrays zulässig?
- 4. Warum ist NULL für DateTime in C# nicht zulässig?
- 5. Wie und warum ist ObsoleteAttribute für Eigenschaftenaccessoren nicht zulässig?
- 6. org.h2.jdbc.JdbcSQLException: Methode ist nur für eine Abfrage zulässig
- 7. Warum ist meine Heuristik für den A * -Algorithmus nicht zulässig?
- 8. Grund für das Überspringen von AOT?
- 9. Warum ist nur das erste Fenster fokussierbar
- 10. Warum ist undefiniertes Verhalten in C zulässig?
- 11. Debugging .NET dynamische Methoden
- 12. Warum ist dieser Standardvorlagenparameter nicht zulässig?
- 13. Warum ist ImageSource als WPF-Ressource zulässig?
- 14. Was ist Kompilierzeitpolymorphie und warum gilt das nur für Funktionen?
- 15. Begrenzen Sie, welche Methoden für eine Route zulässig sind
- 16. Warum ist das für (;;) Schleifen?
- 17. Sind Methoden in JSP Scriptlet zulässig?
- 18. Dynamische HTTP-Methoden nachrüsten
- 19. Warum ist das Aufrufen einer geschützten statischen Methode in abgeleiteten Klassen zulässig?
- 20. Ist Multithreading für Spark/YARN zulässig?
- 21. Das einfachste Beispiel für das Überschreiben von Methoden mit Generics
- 22. Ist es möglich, das Lernen von Floats zu überspringen?
- 23. Warum ist das Überladen von Methoden nicht für verschiedene Rückgabetypen definiert?
- 24. Warum ist das Löschen im strikten Modus von Javascript5 nicht zulässig?
- 25. $ asyncValidators überspringen, bis das Modell schmutzig ist
- 26. HTML5 Überspringen der Navigation, wenn das Namensattribut veraltet ist
- 27. Warum sind statische Importe von statischen Methoden mit gleichen Namen zulässig?
- 28. Ist diese C-Strukturzuweisungsanweisung zulässig?
- 29. Warum funktioniert der dynamische JDK-Proxy nur mit Interfaces?
- 30. Warum funktionieren implizite Umsetzungselementfunktionen beim Überladen nach Rückgabetyp, während dies für normale Funktionen nicht zulässig ist?
-unity, da dies nicht mit Microsoft Unity zusammenhängt. Sie können diesen Blogpost lesen, http://davedewinter.com/2010/11/21/tip-22-dynamicmethods-in-partial-trust/ Es erfordert bestimmte Berechtigungen, dies zu tun. Daher können Sie, wenn Sie solche Versuche einschränken möchten. –