¿Cómo puedo cargar dinámicamente asambleas primas que contiene código no administrado? (Sin pasar por 'código de verificación fallida política de No verificable' excepción)

StackOverflow https://stackoverflow.com/questions/2945080

Pregunta

Me voy a dar un ejemplo del uso System.Data.SQLite.DLL que es una mixta montaje 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 FileLoadException en "Ver código política fallida No verificable (Excepción de HRESULT: 0x80131402).". Digamos que estoy tratando de cargar este montaje en un niño dominio de aplicación, ¿cómo personalizar la seguridad de que el dominio de aplicación para permitir que me pasa la comprobación de la política?

¿Fue útil?

Solución

Somos la víctima de un mensaje de excepción de mala muerte. Cargando conjuntos con Assembly.Load (byte []) que contienen código no administrado no es compatible. Este es el objeto de este elemento comentarios .

ACTUALIZACIÓN: el elemento de retroalimentación se ha ido ligado, elimina como parte de la limpieza en VS2012 tiempo de liberación. La única parte de ella aún podría recuperarse es este fragmento, copiado de otra página web:

“[...] que sólo permiten imágenes ILOnly a ser cargados [...] ya que todo lo demás no es seguro” -

ACTUALIZACIÓN:. Archive.org enlace fijo con copia de seguridad

Otros consejos

El problema es que el CLR no realiza los pasos normales DLL de carga - como el mapeo de las DLL de secciones separadas en diferentes páginas, ajustando fixups, etc. Cuando se carga un conjunto de bytes primas, esos bytes primas se mapean en la memoria como es, y es de sólo lectura logrado meta-datos. Ninguna cantidad de configuraciones de pruebas, de seguridad va a cambiar este comportamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top