Попытался написать прогу на C# с поддержкой плагинов, но чегото не работает, кто нить помогите, зарание спасибо.
Вот сам код программы и плагина.
Плагин:
using System;
public interface IPlugin
{
string GetName();
}
public class Plugin1:IPlugin
{
public Plugin1()
{
System.Console.WriteLine("Plugin1 start");
}
public string GetName()
{
return "Plugin1";
}
}
Сама программа:
using System;
using System.IO;
using System.Reflection;
public interface IPlugin
{
string GetName();
}
public class PluginsApp
{
public static void Main()
{
string[] files = Directory.GetFiles("plugins", "*.dll");
foreach(string fname in files)
{
Assembly asm = Assembly.LoadFrom(fname);
foreach(Type t in asm.GetExportedTypes())
{
if(typeof(IPlugin).IsAssignableFrom(t))//Вот здесь всегда false, почему ?
{
IPlugin pi = (IPlugin)asm.CreateInstance(t.FullName);
Console.WriteLine(pi.GetName());
}
}
}
}
}
Парюсь уже 3 дня,

нечего не получаеться.
Зарание спасибо.
Здравствуйте, b10t, Вы писали:
B>Попытался написать прогу на C# с поддержкой плагинов, но чегото не работает, кто нить помогите, зарание спасибо.
B>Вот сам код программы и плагина.
Так у тебя два разних IPlugin'а. Вынеси объявление IPlugin в отдельную сборку и ссылайся на нее из проектов приложения и плагина.
... << RSDN@Home 1.0 beta 7a >>
Здравствуйте, b10t, Вы писали:
B>Извените, а можно маленький пример, как ссылаться из приложения и плагина.
1. Создаем новый проект "Class Library", называем его к примеру "PluginIface", помещаем в него код
using System;
namespace PluginIface
{
public interface IPlugin
{
string GetName();
}
}
Компилируем.
2. Создаем новый проект "Class Library", называем его Plugin1, в меню Project щелкаем Add Reference, потом Browse, выбираем PluginIface.dll, Ok, Ok. Помещаем в проект код
using System;
namespace Plugin1
{
public class Plugin1:PluginIface.IPlugin
{
public Plugin1()
{
System.Console.WriteLine("Plugin1 start");
}
public string GetName()
{
return "Plugin1";
}
}
}
Компилируем.
3. Создаем новый проект "Console Application", опять Project->Add Reference->Browse->PluginIface.dll, помещаем код
using System;
using System.IO;
using System.Reflection;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string[] files = Directory.GetFiles("plugins", "*.dll");
foreach (string fname in files)
{
Assembly asm = Assembly.LoadFrom(fname);
foreach (Type t in asm.GetExportedTypes())
{
if (typeof(PluginIface.IPlugin).IsAssignableFrom(t))
{
PluginIface.IPlugin pi = (PluginIface.IPlugin)asm.CreateInstance(t.FullName);
Console.WriteLine(pi.GetName());
}
}
}
}
}
}
Компилируем, организуем рядом с результатом каталог plugins, кладем в него Plugin1.dll, запускаем, все.
... << RSDN@Home 1.0 beta 7a >>
Здравствуйте, lozzy, Вы писали:
L>Никто не знает, как к Студии пишут плагины ? Нет, писать свой не собираюсь — просто интересно. (M/R)SDN прошерстил — не нашел.
Плохо искал. При установке нужно поставить галочку напротив VS SDK, будет хелп.
... << RSDN@Home 1.1 alpha 1 >>