Maison > développement back-end > C++ > Comment puis-je compiler et exécuter dynamiquement des fragments de code C #?

Comment puis-je compiler et exécuter dynamiquement des fragments de code C #?

Patricia Arquette
Libérer: 2025-02-01 14:26:09
original
621 Les gens l'ont consulté

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

Compilation dynamique et exécution du fragment de code

Cet article présente comment compiler et exécuter dynamiquement le fragment de code C # à partir de fichiers texte ou de flux d'entrée. Il est recommandé d'utiliser le modèle d'objet de document de code (codéme) dans la langue C # et .NET pour réaliser cette fonction.

La codom vous permet de faire fonctionner le code en tant qu'objet et d'utiliser le compilateur pour compiler dynamiquement le code. Le fragment de code suivant montre cette méthode:

Dans cet exemple,
<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>
Copier après la connexion
et

sont utilisés pour le code de compilation dynamique. S'il n'y a pas d'erreur de compilation, chargez dynamiquement l'ensemble de programmes compilé et appelez sa méthode CompilationParameters. Afin de montrer les résultats plus complètement, l'exemple de code a été modifié aux résultats de la marionnette imprimés. CSharpCodeProvider Main Cette méthode fournit une solution flexible et générale pour la compilation dynamique et l'exécution du fragment de code C #, vous permettant de réaliser divers scénarios, tels que l'exécution du script ou la génération de code dynamique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal