准备好一个 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);
}
}




没有回复内容