Question

J'ai une application WPF C # qui contient un bouton.

Le code du bouton clic est écrit dans un fichier texte séparé qui sera placé dans les applications répertoire d'exécution.

Je veux exécuter que le code placé dans le fichier texte sur le clic du bouton.

Toute idée comment faire?

Était-ce utile?

La solution

Vous pouvez utiliser Microsoft.CSharp.CSharpCodeProvider pour compiler le code sur la volée. En particulier, voir CompileAssemblyFromFile .

Autres conseils

Exemple de code compilé pour exécuter la méthode de la classe de mouche:

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

Je recommande d'avoir un regard sur Microsoft Roslyn , et plus précisément son classe ScriptEngine. Voici quelques bons exemples pour commencer:

  1. introduction à l'API de script Roslyn
  2. Utiliser Roslyn ScriptEngine pour un ValueConverter à traiter d'entrée d'utilisateur.

Exemple d'utilisation:

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

On dirait que quelqu'un a créé une bibliothèque pour cette appelé C # Eval.

EDIT: lien Mise à jour pour pointer vers Archive.org comme il semble que le site original est mort.

Qu'est-ce que vous avez besoin est un CSharpCodeProvider classe

Il y a plusieurs échantillons pour comprendre comment fonctionne-t-il.

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

Le point important de cet exemple que vous pouvez faire toutes les choses sur Flay en fait.

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

http://www.codeproject.com/Articles/10324 / Compiling-code lors de l'exécution -

Cet exemple est une bonne coz vous pouvez créer dll fichier et il peut donc être partagé entre d'autres applications.

En gros, vous pouvez rechercher http: // www .codeproject.com / Search.aspx? q = CSharpCodeProvider & x = 0 & y = 0 & SBO = kw & pgnum = 6 et obtenir des liens plus utiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top