Exécution du code dynamique dans les applications WPF C #
Cet article aborde le problème de l'exécution du code à partir d'un fichier texte externe dans une application WPF C #. Le fichier texte, contenant le code à exécuter, réside dans le répertoire d'exécution de l'application.
Mise en œuvre
Cette solution exploite une combinaison de techniques de compilation de code et de réflexion. Le processus implique une compilation en temps réel du code à partir du fichier texte et une instanciation et une invocation subséquentes de la méthode cible à partir de l'assemblage compilé.
L'extrait de code suivant illustre cette approche:
// ... code ...
Dictionary providerOptions = new Dictionary
{
{"CompilerVersion", "v3.5"}
};
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
CompilerParameters compilerParams = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = false
};
CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, sourceCode);
if (results.Errors.Count > 0)
throw new Exception("Compilation failed!");
object instance = results.CompiledAssembly.CreateInstance("Foo.Bar"); // Assuming the class is named "Bar" in the "Foo" namespace
MethodInfo method = instance.GetType().GetMethod("SayHello"); // Assuming the method is named "SayHello"
method.Invoke(instance, null);
Explication détaillée
Le code lit d'abord le code C # du fichier texte en une variable de chaîne ( sourcecode
). Un csharpcodeprovider
est initialisé avec des options de compilateur spécifiées. CompilerParameters
sont définis pour générer l'assemblage compilé en mémoire, sans créer de fichier exécutable. La méthode CompileSemblyFromsource
effectue alors la compilation.
La vérification des erreurs suit le processus de compilation. Si la compilation est réussie, une instance de la classe compilée est créée à l'aide de createInstance
, et la méthode spécifiée est invoquée à l'aide de getMethod
et invoque
. Cela permet une exécution dynamique du code chargé à l'extérieur. Notez que l'espace de noms et les noms de classe / méthode doivent correspondre au code dans le fichier texte. La gestion des erreurs (par exemple, les blocs de couple d'essai) doit être ajoutée pour la robustesse dans un environnement de production.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3