2

我正在用 C# 制作一个 IRC 机器人,我希望具有加载插件的功能......例如:会有一个包含一些代码的文本文件,然后程序将导入该文本文件的内容AS CODE...变成一个函数...这怎么可能?

4

5 回答 5

2

我正在为MUD 服务器做同样的事情。该服务器具有您想要使用的已编译插件和代码插件。我使用 CodeDom 创建了自己的脚本引擎,但这很麻烦。我最终切换到CS-Script。所以现在我们将MEF用于编译插件,将 CS-Script 用于代码插件。

于 2009-08-12T01:31:53.730 回答
1

我建议使用C#-script或IronPython之类的DLR 语言(我更喜欢后者)。但是,正如其他人指出的那样,运行程序收到的任何代码都是不安全的——更明智的想法是定义合同接口,并在签名的程序集中接受插件(实现该接口)。

于 2009-08-12T01:30:31.517 回答
0

你可能想看看CSharpCodeProvider课堂。这个问题中有一些示例代码。

除此之外,还有预编译 dll 和使用后期绑定在运行时加载它们的选项。

除此之外,您还可以将Lua 之类的脚本引擎嵌入到您的程序中。

简短的回答是,有各种可用的选项,这取决于您要达到的最佳解决方案。

在前两个示例中,您将查看接口编程,您将在第二个 dll 中定义一些接口,您可以对其进行编译,然后通过反射从程序集中提取一些预定名称,并将其分配给一个变量接口类型并针对它进行调用。

我从未使用过 Lua,但我链接的文章也应该解释如何使用它。

于 2009-08-12T01:19:38.160 回答
0

您需要寻找动态代码编译(参见http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htmhttp://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/article。 php/c10729/ , http://www.codeproject.com/KB/cs/Dynamic_Code_Generation.aspx )

您不认为通过反射将插件加载为 DLL 会更好吗?动态代码不会被签名,因此您无法验证代码是否来自受信任的来源,因此可能会向您的程序用户开放一些非常恶意的代码。

于 2009-08-12T01:20:01.937 回答
0

谢谢大家的帮助,但我希望在导入的代码和主代码之间共享代码,例如,会有一个文本文件,在加载主程序时,它会打开该文本文件并将其作为函数加载...一个可以共享公共字符串和整数之类的代码并激活其他功能一个命令和使用对象等的函数...这可能吗?

于 2009-08-12T18:00:56.750 回答