C# 将源文件编译为插件
C# compiling source files as plugins
我想为我的程序提供插件支持
目标是编译插件文件夹中的文件并启动
方法很少,但我可以让它工作
我目前使用 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 class 不重要,反正我想将它的实例传递给加载函数,这样它就可以改变原始程序的内容
做到了
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);
}
}
来自 运行 方法的代码:
CSScript.Evaluator.ReferenceAssembliesFromCode(
Weird.Properties.Resources.iaddon_source
);
IAddon block = (IAddon) CSScript.Evaluator.LoadCode(File.ReadAllText(f.FullName));
block.Load(resManager, overlay);
我想为我的程序提供插件支持
目标是编译插件文件夹中的文件并启动 方法很少,但我可以让它工作
我目前使用 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 class 不重要,反正我想将它的实例传递给加载函数,这样它就可以改变原始程序的内容
做到了
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);
}
}
来自 运行 方法的代码:
CSScript.Evaluator.ReferenceAssembliesFromCode(
Weird.Properties.Resources.iaddon_source
);
IAddon block = (IAddon) CSScript.Evaluator.LoadCode(File.ReadAllText(f.FullName));
block.Load(resManager, overlay);