Aby uzyskać katalog bin, zawsze działa string path = Assembly.GetExecutingAssembly().Location;
NOT (szczególnie, gdy zespół wykonawczy został umieszczony w tymczasowym katalogu ASP.NET).
Zamiast tego należy użyć string binPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");
Ponadto, powinieneś wziąć FileLoadException i BadImageFormatException pod uwagę.
Oto moja funkcja robocza:
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
}
Pewnie też chcę aby dodać zaznaczenie, aby upewnić się, że nie dodajesz zespołu, który faktycznie działa również :) – Wolfwyrd
Zmienna "ścieżka" zawiera nazwę pliku katalogu, należy ją skrócić za pomocą 'Path.GetDirectoryName (ścieżka)' – cjk
zostały zaktualizowane, aby odzwierciedlić powyższy komentarz. –