2010-12-01 17 views
6

me preguntaba cómo exactamente puedo crear una pequeña aplicación que acepte mi entrada y la ejecute como código. Lo mismo que construir un IDE, pero no quiero llegar tan lejos, pero sí quiero que use el FCL. Así como si tuviera un cuadro de texto y me dio un puñetazo en:C#: ¿cómo creo un programa que ejecutará el código que pinche en un cuadro de texto?

string x = "hello"; 
int myLength; 

myLength = x.length; 

después haga clic en un botón de envío, sería compilar este y ejecutarlo en una ventana de resultados. ¿Hay una manera bastante simple de hacer esto? ¿O voy a tener que corregir un método bastante complicado que rompa todo esto? Lo siento si no estoy siendo totalmente claro, no estaba exactamente seguro de cómo hacer esta pregunta ja ja. Realmente, lo que quiero decir es que quiero crear una especie de herramienta de "calculadora" de código en la que pueda pinchar algunos fragmentos simples y probar lo que está devolviendo sin tener que crear una clase completa y compilar solo para probar algo simple. ¿Alguien puede señalarme en la dirección correcta?

+1

Si lo que desea es la herramienta, descarga http://www.linqpad.net/ – TrueWill

Respuesta

0

Puede empezar por echar un vistazo a this anterior para publicar.

+1

CodeDom no es bueno enfoque en este caso. ver http://stackoverflow.com/questions/2366921/reflection-emit-vs-codedom –

0

En C# esto no será tan fácil, debido a que C# es un lenguaje compilado, no es un lenguaje interpretado.

En un lenguaje interpretado, es bastante fácil de analizar prima de texto como el idioma, y ​​ver los resultados.

Quizás serías más feliz escribiendo en JavaScript o Perl e interpretar eso?

0

Además de las respuestas ya dadas, PowerShell le permite ejecutar el código C# sobre la marcha (o desde un archivo, si lo desea).

3

Usted podría utilizar CSScript

http://www.csscript.net/

De su sitio web:

dynamic script = CSScript.LoadCode(@"using System; 
           public class Script 
           { 
            public void SayHello(string greeting) 
            { 
             Console.WriteLine(greeting); 
            } 
           }") 
           .CreateObject("*"); 
script.SayHello("Hello World!"); 
3

creo que lo que estás buscando es LINQPad. Te permitirá ejecutar pequeños trozos de código sin la responsabilidad de crear pequeñas aplicaciones de consola para probar cosas. Solo por diversión, escribí lo siguiente que compilará y ejecutará lo que esté en el cuadro de texto.

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); 
} 

De hecho, me escribió en LINQPad pero sería muy fácil que se ejecuta en Visual Studio

Cuestiones relacionadas