gpt4 book ai didi

C# 将源文件编译为插件

转载 作者:行者123 更新时间:2023-11-30 16:54:46 24 4
gpt4 key购买 nike

我想为我的程序提供插件支持

目标是编译插件文件夹中的文件并启动几种方法,但我可以让它工作

我目前使用 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 类很重要,反正我想将它的实例传递给加载函数,这样它就可以改变原始程序的内容

最佳答案

做到了

using System;  
using Weird;

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

需要添加接口(interface):

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);

关于C# 将源文件编译为插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com