Per ottenere la directory bin, string path = Assembly.GetExecutingAssembly().Location;
fa NON funziona sempre (soprattutto quando l'assembly in esecuzione è stato inserito in una directory temporanea ASP.NET).
Invece, si dovrebbe utilizzare string binPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");
Inoltre, si dovrebbe probabilmente prendere la FileLoadException e BadImageFormatException in considerazione.
Qui è la mia funzione di lavoro:
public static void LoadAllBinDirectoryAssemblies()
{
string binPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin"); // note: don't use CurrentEntryAssembly or anything like that.
foreach (string dll in Directory.GetFiles(binPath, "*.dll", SearchOption.AllDirectories))
{
try
{
Assembly loadedAssembly = Assembly.LoadFile(dll);
}
catch (FileLoadException loadEx)
{ } // The Assembly has already been loaded.
catch (BadImageFormatException imgEx)
{ } // If a BadImageFormatException exception is thrown, the file is not an assembly.
} // foreach dll
}
fonte
2011-04-08 18:56:34
Probabilmente si vorrà anche per aggiungere un controllo per assicurarti di non aggiungere l'assembly che stai effettivamente eseguendo :) – Wolfwyrd
La variabile 'path' contiene il nome file della directory, deve essere abbreviato con' Path.GetDirectoryName (path) ' – cjk
È stato aggiornato per riflettere il commento sopra. –