Maison > développement back-end > C++ > Comment puis-je compiler et exécuter du code saisi par l'utilisateur lors de l'exécution dans .NET ?

Comment puis-je compiler et exécuter du code saisi par l'utilisateur lors de l'exécution dans .NET ?

Mary-Kate Olsen
Libérer: 2024-12-31 08:19:10
original
696 Les gens l'ont consulté

How Can I Compile and Execute User-Inputted Code at Runtime in .NET?

Compilation et exécution du code d'exécution dans .NET

Contexte :

L'évaluation dynamique des expressions mathématiques n'est pas la principale préoccupation ici . L'objectif est de compiler et d'exécuter un nouveau code au moment de l'exécution dans .NET.

Énoncé du problème :

L'utilisateur doit pouvoir saisir n'importe quelle équation dans une zone de texte et faites-le appliquer aux points de données entrants (représentés par « x »). Ils recherchent une solution qui élimine la surcharge de performances liée à l'analyse du texte de l'équation pour chaque calcul.

Solution proposée :

La solution consiste à traduire l'équation en une fonction sur le fly, ce qui ne nécessiterait une analyse qu'une seule fois. Cela peut être implémenté en convertissant l'équation en pointeur de fonction à l'aide d'une méthode nommée ConvertEquationToCode().

Compilation et exécution de code dans .NET :

Pour compiler et exécuter nouveau code dans .NET, des bibliothèques telles que Microsoft.CSharp, System.CodeDom.Compiler et System.Reflection peuvent être utilisées. Voici un exemple illustrant le processus de compilation d'une classe (SomeClass) avec une méthode (Add42), puis d'appel de cette méthode :

using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Reflection;

namespace RuntimeCompilationTest {
    class Program {
        static void Main(string[] args) {
            // Define the source code for the class with a method
            string sourceCode = @"
                public class SomeClass {
                    public int Add42 (int parameter) {
                        return parameter += 42;
                    }
                }";
            
            // Set up compiler parameters
            var compParms = new CompilerParameters {
                GenerateExecutable = false,
                GenerateInMemory = true
            };
            
            // Create the code provider and compile the source code
            var csProvider = new CSharpCodeProvider();
            CompilerResults compilerResults = csProvider.CompileAssemblyFromSource(compParms, sourceCode);
            
            // Create an instance of the compiled class
            object typeInstance = compilerResults.CompiledAssembly.CreateInstance("SomeClass");
            
            // Get the method info and invoke the method
            MethodInfo mi = typeInstance.GetType().GetMethod("Add42");
            int methodOutput = (int)mi.Invoke(typeInstance, new object[] { 1 });
            
            // Display the method output
            Console.WriteLine(methodOutput);
            Console.ReadLine();
        }
    }
}
Copier après la connexion

Cet exemple démontre les concepts de base de la compilation et de l'exécution d'un nouveau code au moment de l'exécution dans . FILET. En utilisant les espaces de noms et les méthodes mentionnés ci-dessus, il est possible de créer et d'invoquer dynamiquement des fonctions personnalisées en fonction des entrées de l'utilisateur ou d'autres conditions d'exécution.

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