エミットエラーをデバッグしようとしていますが、エミットされたコードによって引き起こされる例外 c に関する詳細情報を見つける簡単な方法はありますか?
たとえば、次のコードを使用します。
let dynamicAssembly =
let asmName = new AssemblyName("MyAsm")
let asmBuilder = AssemblyBuilder.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run)
let moduleBuilder = asmBuilder.DefineDynamicModule("MyModule")
let typeBuilder = moduleBuilder.DefineType("MyDynamicType")
let methodBuilder =
let build = typeBuilder.DefineMethod("MyMethod", MethodAttributes.Public,
CallingConventions.Standard,
typeof<Int32>,
[|typeof<Int32>; typeof<Int32>|])
let ilGen = build.GetILGenerator()
ilGen.Emit(OpCodes.Ldarg_0)
ilGen.Emit(OpCodes.Ldarg_1)
ilGen.Emit(OpCodes.Add)
ilGen.Emit(OpCodes.Ret)
typeBuilder.CreateType() |> ignore
asmBuilder
let myType = dynamicAssembly.GetType("MyDynamicType")
let myObj = Activator.CreateInstance(myType)
myObj.GetType().GetMethod("MyMethod").Invoke(myObj, [|2; 3|]) |> ignore
Invoke
最後から 2 行目で呼び出そうとすると、「呼び出しのターゲットによって例外がスローされました。 . 感想?