Загружать файл .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 здесь, на этой странице, - это путь.