首頁 >後端開發 >C++ >如何從 WPF 應用程式中的檔案動態執行 C# 程式碼?

如何從 WPF 應用程式中的檔案動態執行 C# 程式碼?

Patricia Arquette
Patricia Arquette原創
2025-01-07 19:37:42557瀏覽

How Can I Dynamically Execute C# Code from a File in a WPF Application?

動態執行C#程式碼檔案

問題:

您的WPF C#應用程式附帶一個按鈕,需要執行儲存在應用程式運行時目錄中單獨文字檔案中的程式碼。

解:

要動態執行文字檔案中的程式碼,請依照下列步驟操作:

  1. 編譯程式碼: 使用C#編譯器(例如CSharpCodeProvider)將文字檔案中的程式碼編譯為組件。
  2. 建立已編譯組件的實例: 使用System.Reflection.Assembly類別的CreateInstance()方法建立已編譯組件的實例。
  3. 呼叫方法: 使用System.Reflection.Type類別的GetMethod()和Invoke()方法呼叫實例上的所需方法。

以下是如何執行動態編譯的類別方法的範例程式碼:

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Net;
using Microsoft.CSharp;
using System.CodeDom.Compiler;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string source =
            @"
namespace Foo
{
    public class Bar
    {
        public void SayHello()
        {
            System.Console.WriteLine(""Hello World"");
        }
    }
}
            ";

            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, source);

            if (results.Errors.Count != 0)
                throw new Exception("编译失败!");

            object o = results.CompiledAssembly.CreateInstance("Foo.Bar");
            MethodInfo mi = o.GetType().GetMethod("SayHello");
            mi.Invoke(o, null);
        }
    }
}</code>

按照這些步驟,您可以在WPF應用程式中動態執行來自程式碼檔案的C#程式碼。

以上是如何從 WPF 應用程式中的檔案動態執行 C# 程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn