Tengo un código de transferencia que usa DynamicMethod
s ampliamente para permitir la precompilación, para un mejor rendimiento de arranque en frío. Me di cuenta de que DynamicMethod
s se pueden JITted y se pueden ejecutar con las comprobaciones de visibilidad omitidas, lo que les permite acceder a tipos anidados privados, pero los ensamblados normales no pueden (¿o no? No veo ninguna opción obvia de cargador). ¿Cuál es la razón de esta decisión de diseño?¿Por qué se omiten las comprobaciones de visibilidad solo para métodos dinámicos?
Respuesta
Necesito agitar un poco las manos respondiendo esta pregunta, CAS es siempre complicado. El argumento skipVisibility es relevante para las aplicaciones host confiables que generan código que se ejecuta en un entorno limitado. En tal caso, no es apropiado realizar comprobaciones cuando se genera el método, ya que el entorno de ejecución es incorrecto. Tiene que suceder cuando el método ejecuta dentro de la caja de arena. Donde está sujeto a las verificaciones CAS normales realizadas por el sandbox.
Estableciendo el argumento en true de hecho agrega una solicitud de permiso para ReflectionPermissionFlag.MemberAccess, necesaria para tener la oportunidad de obtener el método generado.
Topsy-turvy. Hay información de fondo en this MSDN article, sección "Adición de RestrictedMemberAccess a Sandboxed Domains".
- 1. ¿Es posible omitir las comprobaciones de visibilidad cuando se genera IL dinámico con MethodBuilder?
- 2. Visibilidad estándar para métodos abstractos
- 3. Ensambles dinámicos y métodos
- 4. ¿por qué las interfaces en lenguajes dinámicos/de tipo suelto?
- 5. UIMenuItems dinámicos con @selector y métodos dinámicos
- 6. Depuración de métodos dinámicos .NET
- 7. ¿Por qué mi referencia de servicio solo genera métodos asíncronos?
- 8. Patrón de objeto nulo para evitar las comprobaciones nulas?
- 9. ¿Por qué los delegados anónimos omiten argumentos, pero lambdas no?
- 10. ¿Por qué las personas a menudo omiten público/privado/protegido al declarar una clase?
- 11. Métodos de visibilidad en la interfaz
- 12. Chef: ¿Por qué se omiten los recursos en un paso "include_recipe"?
- 13. Métodos dinámicos en un modelo de rieles
- 14. ¿Por qué no se resuelven estos métodos?
- 15. métodos jQuery 1.7 on() y off() para elementos dinámicos
- 16. ¿Por qué https solo se usa para iniciar sesión?
- 17. ¿En qué parte de la pila de llamadas deben realizarse las comprobaciones de roles?
- 18. Visibilidad predeterminada para clases C# y miembros (campos, métodos, etc.)?
- 19. ¿Por qué deberían las pruebas unitarias probar solo una cosa?
- 20. MVC Métodos parciales con parámetros dinámicos
- 21. ¿Por qué solo se agrega una vez?
- 22. C#: ¿Por qué las mutaciones en las estructuras de solo lectura no se rompen?
- 23. Cacao: ¿Se requieren comprobaciones para múltiples NSURLConnections asíncronas que utilizan las mismas funciones de delegado?
- 24. ¿Por qué aún se puede acceder a los métodos de ayuda privada en las vistas?
- 25. Visibilidad predeterminada de los métodos de clase en PHP
- 26. Ventajas de las clases con solo métodos estáticos en C++
- 27. ¿Cómo identifico la menor visibilidad requerida de los métodos?
- 28. ¿Por qué las propiedades no pueden ser de solo lectura?
- 29. ¿Por qué no se permite sobrecargar los métodos dentro de los métodos (por ejemplo, cierres sobrecargados)?
- 30. ¿Por qué las clases internas hacen accesibles los métodos privados?
-unidad, ya que esto no está relacionado con Microsoft Unity. Puede leer esta publicación de blog, http://davedewinter.com/2010/11/21/tip-22-dynamicmethods-in-partial-trust/. Requiere ciertos permisos para hacerlo. Por lo tanto, si desea restringir dichos intentos, puede hacerlo. –