Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以从文件中读取代码并让该代码在应用程序中运行吗_C#_Wpf - Fatal编程技术网

C# 我可以从文件中读取代码并让该代码在应用程序中运行吗

C# 我可以从文件中读取代码并让该代码在应用程序中运行吗,c#,wpf,C#,Wpf,我正在使用C#在WPF中开发一个桌面应用程序 为了简单起见,假设我的应用程序具有沿所述方向绘制线的函数。goleft()、goright()、goforward()、goback() 当调用这些函数中的任何一个时,屏幕上将绘制一条一英寸的线 我想制作一个应用程序,用户可以在任何编辑器(比如记事本)中在文件中编写代码,并以固定格式保存该文件(比如.abc或.xyz) 想象的例子: (section_start) For(int i = 0 ; i<= 20 ; i++ )

我正在使用C#在WPF中开发一个桌面应用程序

为了简单起见,假设我的应用程序具有沿所述方向绘制线的函数。goleft()、goright()、goforward()、goback()

当调用这些函数中的任何一个时,屏幕上将绘制一条一英寸的线

我想制作一个应用程序,用户可以在任何编辑器(比如记事本)中在文件中编写代码,并以固定格式保存该文件(比如.abc或.xyz)

想象的例子:

   (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()