Heim >Backend-Entwicklung >C++ >Wie kann ich dynamisch C# -Codefragmente kompilieren und ausführen?

Wie kann ich dynamisch C# -Codefragmente kompilieren und ausführen?

Patricia Arquette
Patricia ArquetteOriginal
2025-02-01 14:26:09689Durchsuche

How Can I Dynamically Compile and Execute C# Code Fragments?

Dynamische Kompilierung und Ausführung des Codefragments

In diesem Artikel wird das C#-Codebagment aus Textdateien oder Eingabestream dynamisch kompiliert und ausgeführt. Es wird empfohlen, das Code -Dokumentobjektmodell (CodedOM) in der C #- und .NET -Sprache zu verwenden, um diese Funktion zu erreichen.

Mit

codedom können Sie den Code als Objekt bedienen und den Compiler verwenden, um den Code dynamisch zu kompilieren. Das folgende Codefragment zeigt diese Methode:

In diesem Beispiel werden
<code class="language-csharp">using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
        var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
        parameters.GenerateExecutable = true;
        CompilerResults results = csc.CompileAssemblyFromSource(parameters,
        @"using System.Linq;
            class Program {
              public static void Main(string[] args) {
                var q = from i in Enumerable.Range(1,100)
                          where i % 2 == 0
                          select i;
                foreach(var item in q)
                {
                    Console.WriteLine(item);
                }
              }
            }");

        // 检查错误
        results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));

        // 动态加载并执行已编译的程序集
        if (results.Errors.Count == 0)
        {
            Assembly assembly = results.CompiledAssembly;
            var type = assembly.GetTypes()[0];
            var method = type.GetMethod("Main");
            method.Invoke(null, new object[] { new string[] { } });
        }
    }
}</code>
und

für den dynamischen Kompilierungscode verwendet. Wenn kein Kompilierungsfehler vorliegt, laden Sie den kompilierten Programmsatz dynamisch und rufen Sie seine CompilationParameters -Methode auf. Um die Ergebnisse vollständiger anzuzeigen, wurde der Beispielcode an den gedruckten Puppengebieten geändert. CSharpCodeProvider Main Diese Methode bietet eine flexible und allgemeine Lösung für die dynamische Kompilierung und Ausführung des C#-Codebagments, mit dem Sie verschiedene Szenarien wie Skriptausführung oder dynamische Codegenerierung realisieren können.

Das obige ist der detaillierte Inhalt vonWie kann ich dynamisch C# -Codefragmente kompilieren und ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn