visual studio proyectos modo ejemplos consola aplicacion c# .net runtime csharpcodeprovider

c# - proyectos - aplicacion de consola visual studio



ejecuta el código c#en tiempo de ejecución desde el archivo de código (5)

Tengo una aplicación WPF C # que contiene un botón.

El código del clic del botón está escrito en un archivo de texto separado que se colocará en el directorio de tiempo de ejecución de las aplicaciones.

Quiero ejecutar ese código colocado en el archivo de texto con el clic del botón.

¿Alguna idea de cómo hacer esto?


Ejemplo de código para ejecutar el método de la clase compiled on fly:

using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.IO; using System.Reflection; using System.Net; using Microsoft.CSharp; using System.CodeDom.Compiler; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { string source = @" namespace Foo { public class Bar { public void SayHello() { System.Console.WriteLine(""Hello World""); } } } "; Dictionary<string, string> providerOptions = new Dictionary<string, string> { {"CompilerVersion", "v3.5"} }; CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions); CompilerParameters compilerParams = new CompilerParameters {GenerateInMemory = true, GenerateExecutable = false}; CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source); if (results.Errors.Count != 0) throw new Exception("Mission failed!"); object o = results.CompiledAssembly.CreateInstance("Foo.Bar"); MethodInfo mi = o.GetType().GetMethod("SayHello"); mi.Invoke(o, null); } } }


Lo que necesitas es una clase CSharpCodeProvider

Hay varias muestras para entender cómo funciona.

1 http://www.codeproject.com/Articles/12499/Run-Time-Code-Generation-I-Compile-C-Code-using-Mi

El punto importante de este ejemplo es que puedes hacer todo en flay de hecho.

myCompilerParameters.GenerateExecutable = false; myCompilerParameters.GenerateInMemory = false;

2 http://www.codeproject.com/Articles/10324/Compiling-code-during-runtime

Este ejemplo es bueno porque puedes crear un archivo dll y así se puede compartir entre otras aplicaciones.

Básicamente puede buscar http://www.codeproject.com/search.aspx?q=csharpcodeprovider&x=0&y=0&sbo=kw&pgnum=6 y obtener más enlaces útiles.


Parece que alguien creó una biblioteca para esto llamada C # Eval .

EDITAR: Enlace actualizado para apuntar a Archive.org ya que parece que el sitio original está muerto.


Recomiendo echar un vistazo a Microsoft Roslyn , y específicamente a su clase ScriptEngine . Aquí hay algunos buenos ejemplos para comenzar:

  1. Introducción a la API de scripting de Roslyn
  2. Usando Roslyn ScriptEngine para un ValueConverter para procesar la entrada del usuario .

Ejemplo de uso:

var session = Session.Create(); var engine = new ScriptEngine(); engine.Execute("using System;", session); engine.Execute("double Sin(double d) { return Math.Sin(d); }", session); engine.Execute("MessageBox.Show(Sin(1.0));", session);