c# - ¿Cómo se cargan dinámicamente los ensamblados en bruto que contienen código no administrado?(Omitiendo la excepción ''Verificación de política fallida del código no verificable'')
.net appdomain (2)
El problema es que el CLR no realiza los pasos de carga normales de la DLL, como asignar las secciones separadas de las dll a diferentes páginas, ajustar correcciones, etc. Cuando se carga un ensamblaje desde bytes sin procesar, esos bytes sin procesar se asignan a la memoria tal como está, y Sólo se leen los metadatos gestionados. Ninguna cantidad de evidencia o configuración de seguridad cambiará este comportamiento.
Voy a dar un ejemplo del uso de System.Data.SQLite.DLL que es un ensamblaje mixto con código no administrado: si ejecuto esto:
var assembly= Assembly.LoadFrom("System.Data.SQLite.DLL")
No se lanzan excepciones, pero si hago esto:
var rawAssembly = File.ReadAllBytes("System.Data.SQLite.DLL");
var assembly = Assembly.Load(rawAssembly);
El CLR lanza una excepción FileLoadException con "Verificación de la política de código no verificable. (Excepción de HRESULT: 0x80131402)". Digamos que estoy intentando cargar este ensamblaje en un dominio de aplicación infantil, ¿cómo puedo personalizar la seguridad del dominio de aplicación para que me permita pasar la verificación de políticas?
Somos víctimas de un mensaje de excepción desagradable. La carga de ensamblajes con Assembly.Load (byte []) que contiene código no administrado no es compatible. Este es el tema de este artículo de retroalimentación .
ACTUALIZACIÓN: el elemento de comentarios vinculado desaparece, se elimina como parte de la limpieza en el momento de publicación de VS2012. La única parte que aún se puede recuperar es este fragmento, copiado de otra página web:
"[...] solo permitimos que las imágenes de OIT se carguen [...] ya que cualquier otra cosa no es segura" -
ACTUALIZACIÓN: enlace arreglado con copia de seguridad archive.org.