как загрузить все сборки из вашего каталога / bin

В веб-приложении я хочу загрузить все сборки в каталог / bin.

Поскольку это может быть установлено где угодно в файловой системе, я не могу настроить конкретный путь, где он хранится.

Я хочу Список объектов сборки сборки.

Ну, вы можете взломать это вместе со следующими методами, изначально используйте что-то вроде:

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

чтобы получить путь к вашей текущей сборке. Затем перебираем все DLL в пути, используя метод Directory.GetFiles с подходящим фильтром. Ваш последний код должен выглядеть так:

 List allAssemblies = new List(); string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); foreach (string dll in Directory.GetFiles(path, "*.dll")) allAssemblies.Add(Assembly.LoadFile(dll)); 

Обратите внимание, что я не тестировал это, поэтому вам может потребоваться проверить, действительно ли DLL содержит полный путь (и конкатенировать путь, если это не так)

Чтобы получить каталог bin, string path = Assembly.GetExecutingAssembly().Location; НЕ всегда работает (особенно когда исполняющая assembly помещена во временный каталог ASP.NET).

Вместо этого вы должны использовать string binPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");

Кроме того, вы должны, вероятно, учитывать исключения FileLoadException и BadImageFormatException.

Вот моя рабочая функция:

 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 } 

Вы можете сделать это так, но вы, вероятно, не должны загружать все в текущее приложение, например, так как сборки могут содержать вредоносный код.

 public IEnumerable LoadAssemblies() { DirectoryInfo directory = new DirectoryInfo(@"c:\mybinfolder"); FileInfo[] files = directory.GetFiles("*.dll", SearchOption.TopDirectoryOnly); foreach (FileInfo file in files) { // Load the file into the application domain. AssemblyName assemblyName = AssemblyName.GetAssemblyName(file.FullName); Assembly assembly = AppDomain.CurrentDomain.Load(assemblyName); yield return assembly; } yield break; } 

EDIT: я не тестировал код (нет доступа к Visual Studio на этом компьютере), но я надеюсь, что вы получите эту идею.

Я знаю, что это старый вопрос, но …

System.AppDomain.CurrentDomain.GetAssemblies ()

  • Примеры предварительной выборки?
  • Проверьте, равен ли регистр нулю с помощью CMP reg, 0 против OR reg, reg?
  • Как точно работает инструкция x86 LOOP?
  • Как сохранить сборки ASP.NET в AppDomain в живых?
  • Что регистрирует сохранение в соглашении вызова ARM C?
  • Есть ли альтернатива Maven или порт для мира .NET?
  • Правильное изменение неопределенного поведения, если число больше ширины типа?
  • Загрузка нескольких версий одной и той же сборки
  • Ошибки CocoaPods при сборке проекта
  • Как я могу перечислить все загруженные сборки?
  • Размер сборки .NET влияет на производительность?
  • Interesting Posts

    Можно ли использовать экземпляр Gson как статическое поле в компоненте модели (повторное использование)?

    Ограничивает ли Parallel.ForEach количество активных streamов?

    Что такое JAVA_HOME? Как JVM находит путь javac, хранящийся в JAVA_HOME?

    В powerpoint, как я могу получить значок пули в текстовом поле, чтобы использовать тот же значок, что и в поле «Нажмите здесь»?

    Как я могу изменить учетные данные по умолчанию, используемые для подключения к Visual Studio Online (TFSPreview) при загрузке Visual Studio?

    Не пытайтесь ли вы блокировать блокировки, если исключения не выбрасываются?

    Как открыть несколько окон при запуске Outlook 2010?

    Как запланировать запрос MySQL?

    Как передать параметр в jsp: включить через c: set? Каковы области переменных в JSP?

    Есть ли селектор CSS для текстовых узлов?

    Программная клавиатура изменяет размер фонового изображения на Android

    Обслуживание статических файлов со встроенным Jetty

    Преимущества Cache vs Session

    Android studio 3.0: невозможно разрешить зависимость для: app @ dexOptions / compileClasspath ‘: не удалось разрешить проект: аниматоры

    Разница между списком и массивом

    Давайте будем гением компьютера.