Pregunta

Tengo una DLL de ensamblado de .NET que se crea en la marcha del código de pre-compilados en una base de datos. ¿Hay una manera de crear el archivo DLL, poner los datos en ella, cargarlo con la clase Assembly, a continuación, cuando el proceso finalice, se la supresión de DLL?

Mis primeros pensamientos fueron para abrirlo con la bandera FILE_SHARE_DELETE, cargarlo con Assembly.LoadFrom, y hacer que se borrará automáticamente.

A pesar de que hace LoadLibrary archivos abiertos con la bandera FILE_SHARE_DELETE, cuando el DLL todavía está asignada en la memoria, el sistema operativo no borrará el archivo.

Entonces, ¿cómo se puede eliminar el archivo DLL cuando el proceso sale sin utilizar AppDomains o iniciar externa "eliminar este archivo después de salir del proceso de destino" ejecutables (los archivos DLL de .NET que se cargan en tiempo de ejecución dependen de la entrada del usuario, por lo que haciendo esto implicaría algún tipo de comunicación entre procesos, lo que me gustaría evitar).

¿Fue útil?

Solución

No, eso no puede trabajar. El CLR crea una vista de archivo de memoria asignada en el archivo DLL, no se puede borrar hasta que la vista se destruye. Lo que no ocurrirá hasta que se descarga el dominio de aplicación. Dado que es probable que cargarlo en la AD primaria, eso no ocurrirá hasta que el programa deje de funcionar.

Un ayudante de proceso que se inicia su principal y borra el archivo DLL después de que deje de funcionar es todo lo que puedo pensar si no desea utilizar un anuncio.

Otros consejos

Si se mantiene un registro de dónde se compila y se guarda en la asamblea, sólo puede utilizar File.Delete de la ubicación (situado en System.IO)

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