2012-04-04 19 views
6

Przesyłam kod, który szeroko wykorzystuje DynamicMethod s, aby umożliwić prekompilację, dla lepszej wydajności uruchamiania na zimno. Zauważyłem, że można je JITted i wykonać z pominiętymi sprawdzeniami widoczności, co pozwala im uzyskać dostęp do prywatnych typów zagnieżdżonych, ale normalne złożenia nie mogą (lub nie mogą? Nie widzę żadnej oczywistej opcji programu ładującego). Jakie jest uzasadnienie tej decyzji dotyczącej projektu?Dlaczego pomijanie kontroli widoczności jest dozwolone tylko w przypadku metod dynamicznych?

+1

- asocjacja, ponieważ nie jest związana z Microsoft Unity. Możesz przeczytać ten post na blogu, http://davedewinter.com/2010/11/21/tip-22-dynamicmethods-in-partial-trust/ To wymaga pewnych uprawnień, aby to zrobić. Dlatego jeśli chcesz ograniczyć takie próby, możesz. –

Odpowiedz

2

Muszę pomachać rękami nieco odpowiadając na to pytanie, CAS jest na zawsze skomplikowany. Argument skipVisibility jest odpowiedni dla zaufanych aplikacji hosta, które generują kod wykonywany w piaskownicy. W takim przypadku nie jest właściwe wykonywanie sprawdzeń, gdy metoda jest generowana, ponieważ środowisko wykonawcze jest błędne. Musi się to zdarzyć, gdy metoda zostanie przeprowadzona wewnątrz piaskownicy. Gdzie jest poddawany normalnym kontrolom CAS wykonywanym przez piaskownicę.

Ustawienie prawdziwego argumentu dodaje żądanie zgody na ReflectionPermissionFlag.MemberAccess, wymagane, aby mieć szansę na wygenerowanie wygenerowanej metody.

Topsy-turvy. Istnieje kilka dodatkowych informacji w sekcji this MSDN article, "Dodawanie restrictedMemberAccess do Sandboxed Domains".

Powiązane problemy