在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);}
}