Здравствуйте! У меня возникла следующая проблема. Я хочу подключать библиотеки во время выполнения программы... В моем случае я написал тестовое приложение, которое выводит методы public, реализованные в библиотеке. Все вроде работает нормально. НО! Если у моей библиотеки при сборке в References есть другая, сторонняя, библиотека и объявлены переменные типов той библиотеки из References, то выдается исключение... Как бороться с этим? Как правильно подключить мою библиотеку, которая использует методы другой библиотеки?
Вот код:
Моё приложение (библиотеки ищутся в папке Plugins)
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
namespace PluginSearcher
{
class Program
{
static void SearchAndAddPlugins(string path)
{
DirectoryInfo di = new DirectoryInfo(path);
foreach (FileSystemInfo fsi in di.GetFileSystemInfos())
{
if (fsi is FileInfo)
{
try
{
Assembly asm = Assembly.LoadFile(fsi.FullName);
Console.WriteLine("Plugin name: " + fsi.Name);
Type[] alltypes = asm.GetTypes();
Type t = alltypes[0];
Console.WriteLine("Plugin's DLL Class: " + t.Name);
ConstructorInfo[] ci = t.GetConstructors();
ParameterInfo[] cpi = ci[0].GetParameters();
object reflectOb;
if (cpi.Length > 0)
{
object[] consargs = new object[cpi.Length];
for (int n = 0; n < cpi.Length; n++)
consargs[n] = 10 + n * 20;
reflectOb = ci[0].Invoke(consargs);
}
else
reflectOb = ci[0].Invoke(null);
MethodInfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public);
foreach (MethodInfo m in mi)
{
Console.WriteLine("Method: {0}", m.Name);
ParameterInfo[] pi = m.GetParameters();
}
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
}
}
else
{
SearchAndAddPlugins(fsi.FullName);
}
}
}
static void Main(string[] args)
{
if (Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "Plugins")))
{
Console.WriteLine("Directory Plugins exist! Searching plugins...");
SearchAndAddPlugins(Path.Combine(Directory.GetCurrentDirectory(), "Plugins"));
}
else
Console.WriteLine("Directory Plugins not exist");
Console.ReadKey();
}
}
}
Внешняя библиотека была добавлена из GAC? может быть это поможет.
Здравствуйте, vitek078, Вы писали:
V>Здравствуйте! У меня возникла следующая проблема. Я хочу подключать библиотеки во время выполнения программы... В моем случае я написал тестовое приложение, которое выводит методы public, реализованные в библиотеке. Все вроде работает нормально. НО! Если у моей библиотеки при сборке в References есть другая, сторонняя, библиотека и объявлены переменные типов той библиотеки из References, то выдается исключение... Как бороться с этим? Как правильно подключить мою библиотеку, которая использует методы другой библиотеки?
V>Вот код:
V>Моё приложение (библиотеки ищутся в папке Plugins)