动态编译和执行C#代码-C#语言论坛-编程语言区-资源工坊-游戏模组资源分享

动态编译和执行C#代码

准备好一个 txt文本文件
code.txt:

using System;
using System.IO;
using System.Reflection;
using System.Runtime;

public class DynamicCode
{
    public void Execute()
    {  

        // 你好
	
         Console.WriteLine("你好世界");
    }
}

然后编译方法:

/// <summary>
    /// 动态编译
    /// </summary>
    /// <param name="文本文件名"></param>
    /// <param name="代码类名"></param>
    /// <param name="入口方法名"></param>
    public static void 动态编译(string 文本文件名 ,string 代码类名 ,string 入口方法名)
    {
        // 步骤1:从文件中读取代码
        string code = File.ReadAllText(文本文件名);

        // 步骤2:设置编译参数
        CompilerParameters parameters = new CompilerParameters
        {
            GenerateExecutable = false, // 不生成可执行文件
            GenerateInMemory = true, // 在内存中生成
            TreatWarningsAsErrors = false // 不将警告视为错误
        };
        // 添加必要的程序集引用
        parameters.ReferencedAssemblies.Add("System.dll");
        parameters.ReferencedAssemblies.Add("System.Runtime.dll");

        // 步骤3:创建C#代码提供者并编译代码
        var cSharpCodeProvider = new CSharpCodeProvider();
        CompilerResults results = cSharpCodeProvider.CompileAssemblyFromSource(parameters, code);

        if (results.Errors.HasErrors)
        {
            // 处理编译错误
            foreach (CompilerError error in results.Errors)
            {
                Console.WriteLine($"错误 ({error.ErrorNumber}): {error.ErrorText}");
            }
        }
        else
        {
            // 步骤4:加载已编译的程序集
            Assembly assembly = results.CompiledAssembly;

            // 步骤5:找到类型和方法,并执行代码
            Type type = assembly.GetType(代码类名);
            object obj = Activator.CreateInstance(type);
            MethodInfo method = type.GetMethod(入口方法名);
            method.Invoke(obj, null);
        }
    }

这里只需要执行: 动态编译(code.txt,DynamicCode,Execute)
运行就可以实现动态编译了。

请登录后发表评论

    没有回复内容