본문 바로가기

C#

C# 동적 어셈블리 생성과 실행

C#에서는 동적으로 어셈블리를 생성하고 실행할 수 있습니다. 이 기능은 런타임에 코드를 생성하고 실행해야 하는 상황에서 유용합니다.

1. 동적 어셈블리 생성 기본

System.Reflection.Emit 네임스페이스를 이용해 동적 어셈블리를 생성할 수 있습니다.

2. 간단한 예제 코드

using System;
using System.Reflection;
using System.Reflection.Emit;

class Program
{
    static void Main()
    {
        var assemblyName = new AssemblyName("DynamicAssembly");
        var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
        var moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule");

        var typeBuilder = moduleBuilder.DefineType("HelloType", TypeAttributes.Public);

        var methodBuilder = typeBuilder.DefineMethod("SayHello",
            MethodAttributes.Public | MethodAttributes.Static,
            typeof(void), Type.EmptyTypes);

        var il = methodBuilder.GetILGenerator();
        il.EmitWriteLine("Hello from dynamic assembly!");
        il.Emit(OpCodes.Ret);

        var helloType = typeBuilder.CreateType();

        var method = helloType.GetMethod("SayHello");
        method.Invoke(null, null);
    }
}

이 코드는 런타임에 "HelloType" 클래스를 만들고, "SayHello" 메서드를 정의해서 콘솔에 메시지를 출력합니다.

3. 활용 팁

동적 어셈블리는 즉석에서 코드를 생성하여 플러그인, 스크립팅, 표현식 평가 등에 활용할 수 있습니다.