Domanda

Ho un assembly DLL .NET che si crea on-the-fly dal codice pre-compilato in un database. C'è un modo per creare il file DLL, mettere i dati in esso, caricarlo con la classe Assembly, poi, quando le uscite di processo, sono che la DLL essere cancellato?

I miei primi pensieri erano per aprirlo con il flag FILE_SHARE_DELETE, caricarlo con Assembly.LoadFrom, e farlo automaticamente cancellato.

Anche se LoadLibrary fa i file aperti con il flag FILE_SHARE_DELETE, quando la DLL è ancora mappato in memoria, il sistema operativo non sarà eliminare il file.

Quindi, come può la DLL essere eliminato quando il processo si chiude senza utilizzare AppDomains o l'avvio esterno "eliminare questo file dopo le uscite di processo di destinazione" eseguibili (le DLL .NET che caricano in fase di runtime dipendono da input dell'utente, così facendo ciò comporterebbe una sorta di comunicazione di processo, che vorrei evitare).

È stato utile?

Soluzione

No, non può funzionare. Il CLR crea una memoria mappata vista dei file sul DLL, esso non può essere cancellata fino a quel punto di vista è distrutto. Il che non accadrà fino a quando viene scaricato il dominio di applicazione. Dal momento che probabilmente stai caricarla nella dC primaria, che non accadrà fino a quando il programma smette di funzionare.

Un processo di supporto che avvia il principale e cancella la DLL dopo che smette di funzionare è tutto quello che posso pensare se non si desidera utilizzare un AD.

Altri suggerimenti

Se si tiene traccia di dove il gruppo viene compilato e salvato, si può semplicemente utilizzare File.Delete sulla localizzazione (Situato nel System.IO)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top