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

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

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

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

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

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

Спасибо.

Ответ 1

Используйте Assembly.GetTypes() для получения коллекции всех типов или Assembly.GetType(name) для получения определенного типа.

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

Аналогичным образом вы можете получить методы с помощью Type.GetMethods() и т.д.

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

Ответ 2

Вот как вы можете получить классы, если знаете тип.

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

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

YourType myType = assembly.CreateInstance(fullTypeName);

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

Если вы хотите, чтобы я только что ответил Джон Скит.

Ответ 3

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

Отметьте здесь для получения основных рекомендаций по этому вопросу.

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

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

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