C# компиляция исходных файлов в виде плагинов

Я хочу сделать поддержку плагинов для моей программы

цель состоит в том, чтобы заставить это скомпилировать файлы в папке плагина и запустить несколько методов, но я могу заставить это работать

мой текущий прогресс с использованием CSScriptLibrary:

public static void run(String fileName, String methodName, params Object[] parameters)
    {
        FileInfo f = new FileInfo(fileName);

        try
        {
            CSScript.Evaluator.Reset();
            CSScript.Evaluator.ReferenceAssembliesFromCode(File.ReadAllText(Environment.CurrentDirectory + @"\addons\ResourceManager.cs"));
            dynamic block = CSScript.Evaluator.LoadCode(File.ReadAllText(f.FullName));
            block.Load(parameters); // <---- Exception
        }
        catch(Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }

но это выдает исключение:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: The best overloaded method match for 'WAddon.Load(Weird.ResourceManager)' has some invalid arguments AddonManager.cs:line 28

файл аддона:

using System;
using Weird;

class WAddon
{
public static void Load(ResourceManager resManager)
{
    resManager.add("var", "0");
}
}

я не думаю, что класс Resmanager важен в любом случае, хочу передать его экземпляр для загрузки функции, чтобы он мог изменить вещи в оригинальной программе

1 ответ

Решение

Сделал это

using System;  
using Weird;  

public class WAddon : IAddon  
{  
    public void Load(ResourceManager resManager)  
    {  
        resManager.add("var", "24");  
    }  
}

необходимо добавить интерфейс:

using System;    

namespace Weird  
{  
    public interface IAddon  
    {  
        void Load(ResourceManager resManager, Overlay overlay);  
    }  
}

код из метода run:

CSScript.Evaluator.ReferenceAssembliesFromCode(
        Weird.Properties.Resources.iaddon_source
    );
IAddon block = (IAddon) CSScript.Evaluator.LoadCode(File.ReadAllText(f.FullName));

block.Load(resManager, overlay);  
Другие вопросы по тегам