remarks name generate example comentarios c# linqpad

c# - name - ¿Cómo LINQPad compila código?



xml doc (2)

De "Cómo funciona LINQPad" :

LINQPad compila sus consultas utilizando CSharpCodeProvider (o VBCodeProvider) de .NET

Obviamente, hay algo más que eso, pero es lo que pediste, lee el enlace para obtener más detalles.

Si quieres echar un vistazo a una implementación bastante más simplista, puedes descargar el código fuente de Snippy, la pequeña herramienta que creé para C # en profundidad. Nuevamente, usa CSharpCodeProvider , y es un ejemplo bastante simple que es fácil de entender, con un poco de suerte. (Hay solo unas pocas clases involucradas, IIRC.)

Supongo que no invoca csc.exe ni implementa un compilador completo, entonces, ¿cómo funciona?

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[] { } });


La respuesta de Jon de hace casi 5 años ya no está actualizada.

De "Cómo funciona LINQPad" (a 29 de enero de 2016):

LINQPad 5 compila sus consultas utilizando las bibliotecas de Microsoft Roslyn (en el pasado usaba CSharpCodeProvider y VBCodeProvider de .NET).

Puede ver un ejemplo de cómo usar Roslyn para compilar su código aquí: Aprenda Roslyn ahora - Parte 16 - La API Emit