C# 我可以从文件中读取代码并让该代码在应用程序中运行吗
我正在使用C#在WPF中开发一个桌面应用程序 为了简单起见,假设我的应用程序具有沿所述方向绘制线的函数。goleft()、goright()、goforward()、goback() 当调用这些函数中的任何一个时,屏幕上将绘制一条一英寸的线 我想制作一个应用程序,用户可以在任何编辑器(比如记事本)中在文件中编写代码,并以固定格式保存该文件(比如.abc或.xyz) 想象的例子:C# 我可以从文件中读取代码并让该代码在应用程序中运行吗,c#,wpf,C#,Wpf,我正在使用C#在WPF中开发一个桌面应用程序 为了简单起见,假设我的应用程序具有沿所述方向绘制线的函数。goleft()、goright()、goforward()、goback() 当调用这些函数中的任何一个时,屏幕上将绘制一条一英寸的线 我想制作一个应用程序,用户可以在任何编辑器(比如记事本)中在文件中编写代码,并以固定格式保存该文件(比如.abc或.xyz) 想象的例子: (section_start) For(int i = 0 ; i<= 20 ; i++ )
(section_start)
For(int i = 0 ; i<= 20 ; i++ )
{
if(i<5)
goforward();
else if(i==5)
goleft();
else if(i < 10)
forward();
.......
........
}
(section_End)
(开始部分)
对于(int i=0;i,如果我理解正确,这称为编写应用程序的脚本。C#不支持开箱即用。需要研究的一件事可能是Microsoft的新Roselyn编译器(它是对C#编译器的一种新尝试,它允许您这样做)
有关Roselyn的更多信息,请查看:
我只看过它的一个演示,但它看起来很有前途,应该可以解决您的问题。不清楚您想要编译什么样的代码,但这里有一个关于如何使用C#编译代码的示例。您可以选择CodeDOM或IL Emit
您可以使用读取文件内容,并获取需要执行的代码
然后,您可以使用如下方式执行代码:
您可以使用IronPython来处理脚本
下面是一个如何做到这一点的示例:
首先,您需要一个导航对象来执行以下操作:
public class NavigationObject
{
public int Offset { get; private set; }
public void GoForwards()
{
Offset++;
}
public void GoBackwards()
{
Offset--;
}
}
然后,执行该文件的代码:
public void RunNavigationScript(string filePath, NavigationObject navObject)
{
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
scope.SetVariable("navigation", navObject);
var source = engine.CreateScriptSourceFromFile(filePath);
try
{
source.Execute(scope);
}
catch(Exception
{
}
}
然后,脚本文件可以采取以下形式:
for x in range(0,20):
if x == 5:
navigation.GoBackwards()
else:
navigation.GoForwards()
听起来像是在运行时编译到内存中的程序集。你想要解析器/解释器还是JIT编译器?类似的问题:@RuteshMakhijani你指的是同一个问题吗?@RuteshMakhijani什么?这就是这个问题的确切链接
for x in range(0,20):
if x == 5:
navigation.GoBackwards()
else:
navigation.GoForwards()