我目前正在编写一些代码,我想知道是否可以从我的应用程序执行一些C#代码。我会给你一个想法,让我们说我想给用户一个文本框,让他们键入一些代码,然后打开,我想他们要求一个水果列表,然后通过每个水果,并输出它..一个例如:有没有办法在应用程序中解析/运行C#,就像脚本一样?
var fruitList = getFruit();
foreach(var fruit in fruitList)
{
print(fruit.Name);
}
我希望能够通过这个和分配水果对象fruitList列表,解析器应该能够getFruit()绑到我写在C#中的方法码。打印也是如此,它应该将它等同于我写的将输出到文本框的打印函数。
现在我知道C#不是一个脚本,它被编译,我做了很多谷歌搜索,但无法找到任何东西。我唯一的选择似乎是自己编写一个小语言解析器 - 这听起来很有趣 - 但我之前完成了这个工作,而且我知道这很难。所以这只是一个初步检查,看看在我承诺长期以前是否存在某种解决方案。
所以,我的同事程序员,你知道任何可能能够帮助我吗?
如果不是,没问题,我非常感谢所有反馈,无论是提示,建议,链接到文章,如http://blogs.msdn.com/b/ericwhite/archive/2010/06/29/writing-a-recursive-descent-parser-using-c-and-linq.aspx或解决方案。
问候,
亚当
编辑:我已经得到了一个工作示例。注意这段代码有点乱,因为我已经将一些其他代码粘贴到测试应用程序中,但它可以工作。基本上,我将代码编译成DLL,然后加载DLL,找到类型,找到方法并调用它。这太快了!我不想垃圾邮件你这么完整的代码如下:
http://imdsm.blogspot.com/2012/01/compile-c-into-assembly-then-load-it.html
感谢大家谁张贴在这里。你刚刚救了我几天的困惑!
确实很有意思 - 不完全确定它是正确的解决方案,除非可能生成剩余的代码并将其添加到编译中 - 但是,我仍然担心这个执行时间。但是,感谢您的链接! – 2012-01-09 12:39:49
CSharpCodeProvider将非常快速,因为编译的成本只发生一次。 A-la IronRuby在加载后也应该没问题,但它是一个完整的脚本环境+您可以在这些语言中获得通常的脚本运行时。 – 2012-01-09 14:14:25