Frage

Ich habe eine WPF C # Anwendung, die eine Schaltfläche enthält.

Der Code der Schaltfläche klicken wird in separater Textdatei geschrieben, die in dem Anwendungsverzeichnis Laufzeit gestellt werden.

Ich will Ausführen , dass in der Textdatei platziert Code auf dem Klick auf den Button.

Jede Idee, wie dies zu tun?

War es hilfreich?

Lösung

Sie können mit Microsoft.CSharp.CSharpCodeProvider kompilieren Code on-the-fly. Insbesondere finden Sie unter CompileAssemblyFromFile .

Andere Tipps

Codebeispiel für auf Fly Klassenmethode zusammengestellt Executing:

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

ich empfehlen, einen Blick auf Microsoft Roslyn und insbesondere seine ScriptEngine Klasse. Hier sind ein paar gute Beispiele für den Anfang:

  1. Einführung in die Roslyn Scripting API
  2. Mit Roslyn Scriptengine für einen Valueconverter zu Prozess Benutzereingabe .

Anwendungsbeispiel:

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

Sieht aus wie jemand erstellt eine Bibliothek für das genannte C # Eval .

EDIT: Aktualisierte Link zu Punkt Archive.org wie es scheint wie die Original-Website tot ist.

Was Sie brauchen, ist ein CSharpCodeProvider Klasse

Es gibt mehrere Proben zu verstehen, wie es funktioniert.

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

Der wichtige Punkt dieses Beispiels, dass Sie alle Dinge auf flay tatsächlich tun können.

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

2 http://www.codeproject.com/Articles/10324 / Compilieren-Code-während-runtime

In diesem Beispiel ist gut Coz Sie DLL-Datei erstellen und so kann es zwischen anderen Anwendungen gemeinsam genutzt werden.

Grundsätzlich können Sie die Suche nach http: // www .codeproject.com / search.aspx? q = CSharpCodeProvider & x = 0 & y = 0 & SBO = kw & pgnum = 6 und nützliche Links erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top