Загрузка DLL из папки, проект C # windows form - PullRequest
2 голосов
/ 19 января 2012

Ну, я видел, как это было сделано в другом проекте, который также использовал формы Windows, и мне просто интересно, как это можно сделать. В основном то, что я спрашиваю, например: у меня есть 2 проекта формы окон, в настоящее время они оба раздельные, но я хотел бы объединить их друг с другом. Одним из важных аспектов этого будет то, как загрузить второй проект в первый. Итак, я собрал свой второй проект в виде файла .dll. И затем я хочу поместить этот DLL-файл в папку внутри проекта, а затем иметь возможность искать любые DLL-файлы в папке и загружать их.

Итак, я знаю, что могу сделать это, добавив файл .dll из моего второго проекта в ссылки на первый проект, но особенно мне интересно, можно ли это сделать без этого? Так что в моем первом проекте я могу просто сказать; «Поиск« DirectoryName », если в этой папке есть какие-либо DLL-файлы, загрузите их и добавьте в список в проекте, который увидит и надеюсь использовать пользователь, т.е.

Ответы [ 3 ]

4 голосов
/ 19 января 2012

То, что вы ищете, может быть достигнуто с помощью механизма под названием Отражение

Reflection позволяет, между прочим, динамически загружать сборку в ваше приложение.

Класс, который вам нужен, называется Assembly , в котором есть несколько полезных методов для загрузки сборок:

LoadFile, LoadFrom и еще несколько.

Вот пример кода загрузки сборки по заданному пути :

string path = @"D:\Folder\MyDll.dll";
Assembly assembly = Assembly.LoadFrom(path);

Как только вы загрузили сборку и получили ссылку на объект Assembly, вы можете создавать объекты, которые в ней определены, вызывать их методы и т. Д.

Дополнительные ресурсы можно найти здесь: Динамическая загрузка и использование типов

1 голос
/ 19 января 2012

Вам может быть интересно использовать Managed Entity Framework для достижения этой цели.

В качестве альтернативы, вы можете использовать Assembly.LoadFrom (), как описано здесь .

0 голосов
/ 19 января 2012

Вот несколько полезных ссылок.

Спрашивается на SO: здесь и здесь Внешний блог пример

Обычно вам нужно загрузить библиотеку, перечислить типы и использовать Activator.CreateInstance() для создания нового объекта. Наличие интерфейсов для классов, с которыми вам нужно взаимодействовать, поможет вам и здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...