我的C#程序的插件/模块

时间:2009-08-12 01:14:43

标签: c# module plugins irc bots

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

5 个答案:

答案 0 :(得分:2)

我对MUD server做同样的事情。这个服务器有你想要使用的编译插件和代码插件。我使用CodeDom创建了自己的脚本引擎,但这非常麻烦。我最终切换到CS-Script。所以现在我们使用MEF编译插件,使用CS-Script编写代码插件。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可能希望查看CSharpCodeProvider课程。 this question中有一些示例代码。

除此之外,还可以选择预编译dll并使用后期绑定在运行时加载它们。

除此之外,您还可以在程序中嵌入Lua等脚本引擎。

简短的回答是,有各种各样的选择,它取决于你想要达到的最佳解决方案。

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

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

答案 3 :(得分: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会更好吗?动态代码不会被签名,因此您无法验证代码是否来自受信任的来源,因此可能会将程序的用户打开为某些非常恶意的代码。

答案 4 :(得分:0)

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