【发布时间】:2011-04-23 19:26:13
【问题描述】:
我猜它既不调用 csc.exe 也不实现整个编译器,那么它是如何工作的呢?
更新:感谢 Jon Skeet 提供了指向易于学习的代码的指针。
string c = @"
public class A
{
public static void Main(string[] args)
{
System.Console.WriteLine(""hello world"");
}
}
";
CodeDomProvider compiler = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.WarningLevel = 4;
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
CompilerResults r = compiler.CompileAssemblyFromSource(parameters, c);
Assembly a = r.CompiledAssembly;
Type[] ts = a.GetTypes();
Type t = ts[0];
object o = t.GetMethod("Main").Invoke(null, new object[] { new string[] { } });
【问题讨论】:
-
csc.exe,它是 System.CodeDom 工作的原因。还有 IDE。
-
@Hans:嗯,差不多。更准确的说法是 csc.exe 和 IDE 共享一个执行代码分析的公共库。
-
+1 这是一个很好的问题,Jon Skeet 又做了一次!