在C#中执行动态编译的一种方法是使用 CSharpCodeProvider
类。这类可以用来编译和执行C#代码,下面是一个简单的例子:
using System;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
public class Program
{
public static void Main()
{
// 创建一个CSharpCodeProvider实例
CSharpCodeProvider provider = new CSharpCodeProvider();
// 设置编译参数
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.ReferencedAssemblies.Add("System.dll");
// 创建要编译的代码字符串
string code = @"
using System;
namespace DynamicCompileExample
{
public class HelloWorld
{
public void SayHello()
{
Console.WriteLine(""Hello, World!"");
}
}
}
";
// 编译代码
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
// 如果编译出现错误
if (results.Errors.HasErrors)
{
foreach (CompilerError error in results.Errors)
{
Console.WriteLine("Error: {0}", error.ErrorText);
}
return;
}
// 创建编译好的程序集的实例并执行
var helloWorldType = results.CompiledAssembly.GetType("DynamicCompileExample.HelloWorld");
var helloWorldInstance = Activator.CreateInstance(helloWorldType);
var sayHelloMethod = helloWorldType.GetMethod("SayHello");
sayHelloMethod.Invoke(helloWorldInstance, null);
}
}