2012-04-04 11 views
6

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?

+1

-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. –

Antwort

2

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.

Verwandte Themen