2009-12-29 2 views
5

Sto cercando di eseguire una distribuzione rapida e sporca di un progetto. Ho pensato che sarebbe stato semplice eseguire il mio processo, utilizzare alcuni strumenti per ottenere un elenco di tutti i file caricati (DLL) e utilizzare tale elenco per creare un elenco di file di copia per la distribuzione di test.Come posso ottenere un elenco di file caricati dal mio processo?

Pensavo all'utilizzo di filemon ma c'è molto rumore. È un progetto .net.

Grazie.

+1

Duplicato di: http://stackoverflow.com/questions/383686/how-do-you-loop-through-currenlty-loaded-assemblies – GrayWizardx

+0

@GrayWizardx Allora perché non votate per chiuderlo allora? È così che dovrebbe funzionare. –

+0

Sono d'accordo sul fatto che la domanda stia diventando allo stesso punto della mia, anche se mi piacerebbe capirlo senza codificare quella logica nel mio progetto. Non ho visto un buon modo per farlo – TheSean

risposta

0

Dovresti essere in grado di utilizzare Reflection di .NET per analizzare la tua applicazione AppDomain (s) e scaricare un elenco di assiemi e posizioni caricati.

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); 
foreach (var assembly in loadedAssemblies) 
{ 
    Console.WriteLine(assembly.GetName().Name); 
    Console.WriteLine(assembly.Location); 
} 
+0

Penso che questa sia la risposta migliore, anche se non è quello che speravo. Non volevo aggiungere codice al mio progetto per realizzare questo. Ma sembra che funzionerà. – TheSean

+0

Si noti che 'GetAssemblies()' non funzionerà in modo coerente, in quanto non è ricorsivo e perderà tutti i riferimenti di assembly nidificati. Ho aggiunto una versione ricorsiva di 'GetAssemblies()' su http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded-assemblies/26300241#26300241. – Contango

0

Partenza AppDomain.GetAssemblies

For Each Ass As Reflection.Assembly In CurrentDomain.GetAssemblies() 
    Console.WriteLine(Ass.ToString()) 
Next 
0

Questa soluzione già un'altra question.

L'essenza di esso è utilizzare l'appdomain corrente per ottenere un elenco di assiemi e passare attraverso la posizione del caricatore.

1

Process Explorer?

+0

Penso di sì ... o alcune delle altre cose di sysinternals .. http://stackoverflow.com/questions/1980429/why-windows-7-isnt-written-in-c – monojohnny

0

Se ho capito la tua domanda, per eseguire un'implementazione veloce puoi impostare tutti i riferimenti del tuo progetto ma quelli del Framework l'impostazione "Copia locale" su true.

In questo modo, quando si crea l'applicazione, si avranno tutte le DLL necessarie nella directory di output (beh, quasi tutte le referenze necessarie ai riferimenti non verranno copiate automaticamente, quindi è meglio aggiungerle come riferimento locale pure).

Spero che questo aiuti. Se no, basta dire perché, proverò a continuare su questo.

+0

grazie, vorrei che fosse semplice. il modo in cui è progettata la nostra app è che abbiamo un sacco di riferimenti caricati in fase di esecuzione. questo è ciò che rende un tale dolore capire. Abbiamo fondamentalmente una cartella bin con centinaia di DLL al suo interno. il mio progetto ha bisogno solo di un sottoinsieme. Io * potrei * copiare solo tutto ma non più di quanto mi serva. – TheSean