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

我的C#程序的插件/模块,c#,module,plugins,irc,bots,C#,Module,Plugins,Irc,Bots,我正在用C#制作一个IRC机器人,我想拥有加载插件的功能。。。例如:将有一个包含一些代码的文本文件,然后程序将该文本文件的内容作为代码导入。。。变成一个函数。。。这是怎么可能的?您可能希望查看CSharpCodeProvider类。中有一些示例代码 除此之外,还可以选择预编译dll并使用后期绑定在运行时加载这些dll 除此之外,您还可以在程序中嵌入类似的脚本引擎 简单的回答是,有各种各样的选择,这完全取决于你想要实现什么,以及什么样的解决方案是最好的 在前两个示例中,您将看到接口编程,您将在第二

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

您可能希望查看
CSharpCodeProvider
类。中有一些示例代码

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

除此之外,您还可以在程序中嵌入类似的脚本引擎

简单的回答是,有各种各样的选择,这完全取决于你想要实现什么,以及什么样的解决方案是最好的

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


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

您需要寻找动态代码编译(请参阅)


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

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

我也在为一个用户做同样的事情。此服务器既有编译插件,也有您想要使用的代码插件。我使用CodeDom创建了自己的脚本引擎,但这相当麻烦。最后我换了一个。因此,现在我们使用编译插件和CS脚本作为代码插件。

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

视情况而定。有时您需要动态编译,因为您正在编译的代码是由用户提供的(例如某种脚本系统)。啊,这是一个很好的观点。当他说“插件”时,这就是我所设想的,不一定是脚本。你能详细说明为什么这是一个麻烦吗?我自己使用CodeDom(讽刺的是,对于一个MUD客户端),它非常简单,但仍然易于使用、扩展等等。然而,当你试图卸载和/或替换一个已经加载的插件时,事情会变得复杂得多。这主要涉及在不同的appdomain中加载程序集。除此之外的任何事情对我来说都是一件麻烦事。我想构建一个MUD而不是一个完整的插件框架,因此我发表了评论。