Я создал небольшое тестовое приложение для демонстрации проблемы, которую пытаюсь решить.У меня есть архитектура плагинов, где плагины являются производными от интерфейса.
Вот код интерфейса:
namespace Test
{
public interface ITestBase
{
int LifeTheUniverseAndEverything();
bool Pessimist();
bool Optimist();
}
}
Это сборка в .dll, на которую ссылается основное программное решение иРешение для плагина.
Вот код плагина:
namespace Test
{
public class TestPlugin : ITestBase
{
public int LifeTheUniverseAndEverything() { return 41; }
public bool Pessimist() { return false; }
public bool Optimist() { return true; }
}
}
. Это создает файл .dll, который помещается в папку с плагинами в главном рабочем каталоге.
Вот основная программа.
namespace Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("testing...");
string[] PluginFileLocs;
try
{
string sWorkingDir = Directory.GetCurrentDirectory();
string sPluginDir = sWorkingDir + "\\Plugins";
PluginFileLocs = Directory.GetFiles(sPluginDir, "*.dll");
foreach (string plugin in PluginFileLocs)
{
Assembly theAssembly = Assembly.ReflectionOnlyLoadFrom(plugin);
foreach (Type type in theAssembly.GetTypes())
{
string aType = type.FullName;
Console.WriteLine(aType);
}
}
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.Message);
}
}
}
}
Проблема заключается в том, что если класс testplugin наследует интерфейс ITestBase, то объект AsAsmbly.GetTypes создает исключение: невозможно загрузить один или несколько запрошенных типов.получить исключения LoaderExceptionПочему и как я могу получить свой плагин для создания интерфейса?