我想知道我究竟能创建一个能够接受我的输入并将其作为代码运行的小应用程序。与构建IDE相同,但我不想走那么远,但我确实希望它使用FCL。就好像我有一个文本框,我打了一拳:
string x = "hello";
int myLength;
myLength = x.length;
然后点击提交按钮,它会编译它并将其运行到输出窗口。有一个非常简单的方法来做到这一点?或者我是否必须采用一种非常复杂的方法来打破这一切?对不起,如果我不完全清楚,我对如何提出这个问题并不是很正面。我真正想要的是,我想创建一种代码“计算器”工具,我可以在其中打入一些简单的片段并测试它返回的内容,而无需构建完整的类并编译只是为了测试一些简单的东西。谁能指出我正确的方向?
答案 0 :(得分:3)
以下是CompilerServices命名空间的一个很好的链接:
答案 1 :(得分:3)
您可以使用CSScript
从他们的网站:
dynamic script = CSScript.LoadCode(@"using System;
public class Script
{
public void SayHello(string greeting)
{
Console.WriteLine(greeting);
}
}")
.CreateObject("*");
script.SayHello("Hello World!");
答案 2 :(得分:3)
我认为你要找的是LINQPad
。它可以让你运行一小段代码,而不需要花费很少的一次性控制台应用程序来测试。为了好玩,我写了以下内容,它将编译并执行文本框中的任何内容。
void Main()
{
TextBox textBox = new TextBox()
{
Multiline = true,
Size = new Size(200, 60),
Text = @"string x = ""hello"";int myLength;myLength = x.Length;MessageBox.Show(myLength.ToString());"
};
Button button = new Button()
{
Location = new Point(0, 60)
};
button.Click += new EventHandler(delegate(object sender, EventArgs e)
{
var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.dll", "System.Windows.Forms.dll" }, "foo.exe", true);
parameters.GenerateExecutable = true;
CompilerResults results = csc.CompileAssemblyFromSource(parameters,
@"
using System.Windows.Forms;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
" +
textBox.Text
+ @"
}
}
}
");
Process proc = Process.Start("foo.exe");
}
);
Form f = new Form
{
Controls = { textBox, button }
};
Application.Run(f);
}
我实际上是在LINQPad
中写的,但是很容易在Visual Studio
中运行
答案 3 :(得分:0)
您可以先查看this之前的SO帖子。
答案 4 :(得分:0)
在C#中,这不会那么容易,因为C#是一种编译语言,而不是解释语言。
在解释语言中,将原始文本解析为语言相当容易,并查看结果。
也许你会更喜欢用JavaScript或Perl输入并解释它?
答案 5 :(得分:0)
除了已经给出的答案之外,PowerShell还允许您即时运行C#代码(如果您愿意,也可以从文件中运行)。