dynamische Codeausführung in WPF C# Applications
Dieser Artikel befasst sich mit dem Problem der Ausführung von Code aus einer externen Textdatei in einer WPF C# -Anwendung. Die Textdatei, die den ausführenden Code enthält, befindet sich im Ausführungsverzeichnis der Anwendung.
Durchführung
Diese Lösung nutzt eine Kombination aus Codekompilierungs- und Reflexionstechniken. Der Prozess beinhaltet eine Echtzeit-Kompilierung des Codes aus der Textdatei und die anschließende Instanziierung und ein Aufruf der Zielmethode aus der kompilierten Versammlung.
Der folgende Code -Snippet veranschaulicht diesen Ansatz:
// ... 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);
detaillierte Erklärung
Der Code liest zuerst den c# Code aus der Textdatei in eine Zeichenfolgenvariable ( SourceCode
). A csharpCodeProvider
wird mit angegebenen Compiler -Optionen initialisiert. CompilerParameters
werden so eingestellt, dass die kompilierte Montage im Speicher generiert wird, ohne eine ausführbare Datei zu erstellen. Die compileasemblyFromSource
Methode führt dann die Kompilierung durch.
Fehlerprüfung folgt dem Kompilierungsprozess. Wenn die Kompilierung erfolgreich ist, wird eine Instanz der kompilierten Klasse mit createInstance
erstellt, und die angegebene Methode wird mit getMethod
und invoke
aufgerufen. Dies ermöglicht eine dynamische Ausführung des externen Codes. Beachten Sie, dass der Namespace und die Klasse/Method -Namen mit dem Code in der Textdatei übereinstimmen müssen. Fehlerbehandlung (z. B. Versuchs-Catch-Blöcke) sollte für Robustheit in einer Produktionsumgebung hinzugefügt werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3