我有一个C#程序,它使用类中具有如下方法的对象:
public double TheMethod(double argument1, double argument2, ...,double argumentN)
{
//method body: do something with the arguments
//return the result
}
我想让用户能够将自己的逻辑编写到方法体中,然后在程序运行时使用它。
在我看来,脚本可能是要走的路,但我在尝试开始时遇到了麻烦。处理这种情况的最佳方法是什么?
注意:如果重要,程序将在较大的主桌面应用程序中运行。我希望用户能够在应用程序已经通过某种编辑器程序运行时编写代码。然后,一旦他们启动实际使用该方法的程序,他们的代码就会被保存和使用。
答案 0 :(得分:1)
如果您希望用户使用c#编写,最简单的方法可能是将文件(或至少是方法体)换成不同的副本,并在每次运行之前重新编译子应用程序。
在运行期间可以对方法体进行实时替换,但这不是轻松的! https://msdn.microsoft.com/en-us/library/system.reflection.emit.aspx
如果您乐意开始创建自己的迷你脚本语言,请查看Antlr http://www.antlr.org/
答案 1 :(得分:1)
您当然可以动态编译和执行C#。见Is it possible to dynamically compile and execute C# code fragments?
取决于您的用户是谁以及他们的脚本需要如何集成到更广泛的应用程序中,IronPython可能是一个更好的选择 - 本质上是在python中编写脚本。有关集成C#和IronPython的详细信息,请参阅https://blogs.msdn.microsoft.com/charlie/2009/10/25/running-ironpython-scripts-from-a-c-4-0-program/。
与从外部源运行任何动态注入的代码一样,请考虑安全性。