在C#中,可以使用System.CodeDom命名空間和System.Reflection命名空間來動態(tài)編譯Assembly。
下面是一個簡單的示例代碼,演示了如何動態(tài)編譯一個包含一個簡單類的Assembly:
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
class Program
{
static void Main()
{
// 創(chuàng)建一個編譯器實例
CSharpCodeProvider provider = new CSharpCodeProvider();
// 設(shè)置編譯參數(shù)
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
// 定義要編譯的代碼
string sourceCode = @"
using System;
namespace DynamicAssembly
{
public class DynamicClass
{
public void PrintMessage()
{
Console.WriteLine(""Hello, dynamic assembly!"");
}
}
}
";
// 編譯代碼
CompilerResults results = provider.CompileAssemblyFromSource(parameters, sourceCode);
// 獲取編譯后的Assembly
Assembly assembly = results.CompiledAssembly;
// 創(chuàng)建一個實例
Type dynamicType = assembly.GetType("DynamicAssembly.DynamicClass");
dynamic instance = Activator.CreateInstance(dynamicType);
// 調(diào)用動態(tài)類的方法
dynamicType.GetMethod("PrintMessage").Invoke(instance, null);
}
}
在這個示例中,我們使用CSharpCodeProvider來創(chuàng)建一個編譯器實例,然后設(shè)置編譯參數(shù)和要編譯的代碼。接下來,我們調(diào)用CompileAssemblyFromSource方法來編譯代碼,并從CompilerResults中獲取編譯后的Assembly。最后,我們使用Activator.CreateInstance來創(chuàng)建動態(tài)類的實例,并調(diào)用其中的方法。
通過這種方式,我們可以在運行時動態(tài)編譯代碼,并使用生成的Assembly中的類。