Загрузить файл .DLL и получить доступ к методам из класса?

Я совершенно новичок в загрузке в такие библиотеки, но вот где я стою:

У меня есть самодельный DLL-файл, который настолько прост, насколько это возможно, сам класс и метод. В домашней программе, которая загружает эту библиотеку, у меня есть:

Assembly testDLL = Assembly.LoadFile("C:\\dll\\test.dll");

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

Что мне делать отсюда? Как именно я загружаю класс & amp; методы в нем?

Благодарю.

 Stan R.06 июл. 2009 г., 18:14
Есть ли конкретная причина, по которой вам нужно использовать отражение для динамической загрузки этой DLL? если нет, то используйте ответ Lunchy.

Ответы на вопрос(3)

Assembly assembly = Assembly.LoadFrom("C:\\dll\\test.dll");

// Load the object
string fullTypeName = "MyNamespace.YourType";

YourType myType = assembly.CreateInstance(fullTypeName);

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

Если вы хотите всего, я бы просто ответил Джону Скиту.

 23 сент. 2013 г., 01:42
Извините, если я выкопаю ваш ответ из могилы. Мне было интересно, возможно ли получить доступ к интерфейсам таким же образом. То есть, если DLL содержит «MyNamespace.MyInterface», как мне к нему добраться? Т.е. в вашем примере "YourType" известен загрузчику dll. Что если это не так, но я знаю его и его методы по имени, то есть потому, что они где-то задокументированы?
 25 сент. 2013 г., 04:40
@ manu3d Да, вы можете. Работает так же, просто замените ваш тип на интерфейс.
Решение Вопроса

Assembly.GetTypes() чтобы получить коллекцию всех типов, илиAssembly.GetType(name) чтобы получить определенный тип.

Затем вы можете создать экземпляр типа с помощью конструктора без параметров, используяActivator.CreateInstance(type) или получить конструкторы, используяType.GetConstructors и вызывать их для создания экземпляров.

Точно так же вы можете получить методы сType.GetMethods() и т.п.

Как правило, после того, как у вас есть тип, есть множество вещей, которые вы можете сделать - посмотрите наСписок членов для дополнительной информации. Если вы застряли, пытаясь выполнить определенную задачу (непростые), просто задайте конкретный вопрос, и я уверен, что мы сможем вам помочь.

dynamically загрузите сборку и затем вызовите методы из классов в ней, вам нужно выполнить некоторую форму динамического вызова.

ПроверьтеВот для базового совета по этому вопросу.

Единственный недостающий бит - как получить сам тип, который можно легко получить с помощью следующего кода:

foreach (Type t in assemblyToScan.GetTypes())
        {
            if(condition)
                //do stuff
        }

И если вы просто хотите использовать сборку статически (имея доступную сборку во время компиляции), то ответ на вопрос Launcy здесь на этой странице - путь.

Ваш ответ на вопрос