오늘, DynamicMethod 클래스에 대해 배우기 시작했습니다. 학습 목적으로 DynamicMethod를 사용하여 인수를 사용하지 않고 항상 부울 값 true
을 반환하는 함수를 만들려고했습니다.DynamicMethod를 사용하여 항상 true를 반환하는 메서드를 만들 때 오류가 발생합니다.
C#에서이 작업을 수행하는 함수를 만든 다음 Telerik JustDecompile로 IL 코드를 검사했습니다.
.method public hidebysig instance bool ReturnTrue1() cil managed
{
.locals init (
[0] bool CS$1$0000
)
IL_0000: nop
IL_0001: ldc.i4.1
IL_0002: stloc.0
IL_0003: br.s IL_0005
IL_0005: ldloc.0
IL_0006: ret
}
아주 간단 해 보입니다. 설명서에 따르면이 명령어는 반환 할 스택에 정수 1을 배치하는 것처럼 보입니다.
내가 본 예제 중 일부를 살펴보면 다음과 같은 콘솔 응용 프로그램을 작성했습니다. 이 코드를 실행하면
using System;
using System.Reflection.Emit;
namespace EntityFrameworkDynamicMethod
{
class Program
{
static void Main(string[] args)
{
ReturnTrue ReturnTrueDelegate = GetReturnTrueDelegate();
ReturnTrueDelegate();
}
delegate bool ReturnTrue();
static ReturnTrue GetReturnTrueDelegate()
{
DynamicMethod method = new DynamicMethod("ReturnTrue", typeof(bool), new Type[] {});
ILGenerator generator = method.GetILGenerator();
Label IL_0005 = generator.DefineLabel();
generator.Emit(OpCodes.Nop);
generator.Emit(OpCodes.Ldc_I4_1);
generator.Emit(OpCodes.Stloc_0);
generator.Emit(OpCodes.Ldloc_0, IL_0005);
generator.MarkLabel(IL_0005);
generator.Emit(OpCodes.Ret);
return (ReturnTrue)method.CreateDelegate(typeof(ReturnTrue));
}
}
}
그러나, 다음과 같은 예외는 무엇을이 예외를 의미합니까 내가이 문제를 해결하기 위해 무엇을해야합니까
ReturnTrueDelegate();
System.Security.VerificationException: Operation could destabilize the runtime.
at ReturnTrue()
에서 발생할?
아 그래, 나는 디버그 모드에서 디 컴파일했다. 나는 그것을 먼저 놓으려고 생각하지 않았다. –