Проверьте, существует ли файл .dll и загрузите его - PullRequest
1 голос
/ 28 ноября 2011

Что проще всего проверить, если файл .dll существует, а затем загрузить его? (мне не нужно использовать модули из этого DLL-файла, я просто хочу его запустить).

Мне бы хотелось иметь простой пример кода.

1 Ответ

3 голосов
/ 28 ноября 2011

Чтобы проверить, существует ли файл, используйте system.io.file.exists(path). Чтобы загрузить сборку, посмотрите на Assembly.Load, вы можете выполнить код из нее, загрузив ее, затем вызвав Activator.CreateInstance для типа из этой сборки. Если у вас есть экземпляр типа, вы можете вызывать методы для него.

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

обновленный пример

Самый простой способ просто выполнить код из динамически загруженной сборки - это заранее знать кое-что об этом.

Вы должны заранее знать имя Type, которое содержит код, который вы хотите выполнить, имя метода, который содержит код, и параметры, которые он принимает. В этом примере предположим, что у вас всегда есть класс в сборке с именем «MyClass», а код, который вы хотите запустить, находится в подпрограмме «Execute», которая не принимает параметров. Вы можете загрузить и выполнить его следующим образом.

Вы должны импортировать System.Reflection

Dim asm as Assembly = Assembly.LoadFrom("TheDll.dll") 'Load the assembly
dim t as type = asm.GetType("MyClass") 'Get a reference to the type that contains the code
dim info as MethodInfo = t.GetMethod("Execute") 'Get a reference to the method on the type that we want to call
dim instance as object = Activator.CreateInstance(t) 'Create an instance of the type to call the method on
info.Invoke(obj,nothing) 'Invoke the method with no parameters
...