IlGenerator在投掷后离开

时间:2016-10-20 17:11:49

标签: c# cil ilgenerator

我正在通过ilgenerator生成一个方法,我遇到了问题。 IlGenerator.BeginCatchBlock()部队离开,在这种情况下是无法接通的指令。

using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Threading;
namespace Stack
{
    class Program
    {
        static void Main(string[] args)
        {
           var asmName = new AssemblyName("Test");
        var domain = Thread.GetDomain();
        var assembly = domain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);
        var module = assembly.DefineDynamicModule("MyModule", "Test.dll", true);
        var type = module.DefineType("MyType");
        var method = type.DefineMethod("MyMethod", MethodAttributes.Public);
        var ilg = method.GetILGenerator();
        ilg.BeginExceptionBlock();
        ilg.ThrowException(typeof(Exception));
        ilg.BeginCatchBlock(typeof(Exception));
        ilg.Emit(OpCodes.Pop);
        ilg.EndExceptionBlock();
        ilg.Emit(OpCodes.Ret);
        type.CreateType();
        assembly.Save("test.dll");
        }
    }
}

实际上,输出就像

 .method public instance void MyMethod () cil managed 
    {
            .maxstack 1
            .try
        {
            IL_0000: newobj instance void [mscorlib]System.Exception::.ctor()
            IL_0005: throw
            IL_0006: leave IL_0011
        } // end .try
        catch [mscorlib]System.Exception
        {
            IL_000b: pop
            IL_000c: leave IL_0011
        } // end handler
        IL_0011: ret
   }

我预计不会将IL_0011留在.try块。 PEVerify没有显示错误。

0 个答案:

没有答案