WPF C# 應用程式中的動態程式碼執行
本文解決了在 WPF C# 應用程式中從外部文字檔案執行程式碼的問題。 包含要執行的程式碼的文字檔案位於應用程式的執行目錄中。
實作
此解決方案結合了程式碼編譯和反射技術。 這個過程涉及即時編譯文字檔案中的程式碼以及隨後從編譯後的程式集中實例化和呼叫目標方法。
以下程式碼片段說明了這種方法:
<code class="language-csharp">// ... code ... Dictionary<string, string> providerOptions = new Dictionary<string, string> { {"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);</code>
詳細說明
程式碼首先將文字檔案中的 C# 程式碼讀取到字串變數 (sourceCode
) 中。 CSharpCodeProvider
使用指定的編譯器選項進行初始化。 CompilerParameters
設定為在記憶體中產生編譯後的程序集,而不建立可執行檔。然後 CompileAssemblyFromSource
方法執行編譯。
錯誤檢查遵循編譯過程。如果編譯成功,則使用 CreateInstance
建立已編譯類別的實例,並使用 GetMethod
和 Invoke
呼叫指定的方法。這允許動態執行外部載入的程式碼。 請注意,命名空間和類別/方法名稱必須與文字檔案中的程式碼相符。 應新增錯誤處理(例如 try-catch 區塊)以確保生產環境中的穩健性。
以上是如何在 WPF C# 應用程式中執行文字檔案中的程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!