程序代码为字符串

时间:2011-07-05 15:15:24

标签: c#

这不是实际用途,但有没有办法在C#中将字符串作为程序代码执行?

例如:
而不是写作

Console.WriteLine("blah blah blah");

我想写点像

string s = "Console.WriteLine(\"blah blah blah\")"
execute(s);

5 个答案:

答案 0 :(得分:1)

我能想到的唯一方法是在运行时编译代码。这篇文章解释了如何执行此操作http://simeonpilgrim.com/blog/2007/12/04/compiling-and-running-code-at-runtime/

答案 1 :(得分:1)

我知道这并不是你要求的(虽然你没有提到字符串中的程序语言),但IronPython很酷:http://secretgeek.net/host_ironpython.asphttp://blogs.msdn.com/b/abhinaba/archive/2006/02/09/528416.aspx

另外(正如boca已经提到的)运行时编译也运行良好:Is it possible to dynamically compile and execute C# code fragments?

答案 2 :(得分:1)

在C#中可能,但故意困难。没有简单的“exec()”功能,你可以开箱即用。

AFAIK这是设计。 Exec函数是一个巨大的安全漏洞,因为它们将语言的全部功能暴露给那些通常不具备这种能力的用户。作为程序员,你经常打算使用exec()函数来允许用户输入简单的数学或字符串表达式,突然你有一个黑客出现并实例化System.Net.WebClient并使用它来下载和执行某些东西更加恶意。没有办法限制允许哪些程序集。

.Net语言中的首选替代方案称为Domain Specific Language (DSL)。 DSL是一种(相对)简单的方法来定义您自己的语法(及其背后的含义),以确定您希望用户做什么样的事情,而没有让他们访问整个基类库的安全隐患。它还具有允许您提供比其他方式更高级别的专业操作的优势。

答案 3 :(得分:0)

您可以使用CodeDOM执行此操作。请参阅MSDN上的Using the CodeDOM

答案 4 :(得分:0)

可以使用Microsoft.CSharp.CSharpCodeProvider完成此操作。

检查this