Supongo que ni invoca csc.exe ni implementa un compilador completo, entonces, ¿cómo funciona?¿Cómo funciona el código de compilación LINQPad?
Actualización: Gracias a Jon Skeet por el puntero al código que fue fácil de aprender.
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, es lo que hace que el trabajo System.CodeDom. Y el IDE. –
@Hans: Bueno, casi. Sería más exacto decir que tanto csc.exe como el IDE comparten una biblioteca común que realiza análisis de código. –
+1 ¡Esta es una gran pregunta y Jon Skeet lo hace OTRA VEZ! – MoonKnight