私はいくつかのILを放出しています、ここに私のコード:
mgen.Emit(OpCodes.Ldc_I4,0);
mgen.Emit(OpCodes.Newarr, typeof(object));
mgen.Emit(OpCodes.Stloc_1); // THIS SHOULD
mgen.Emit(OpCodes.Ldloc_1); // MATCH THIS ONE
mgen.Emit(OpCodes.Callvirt, typeof(IInternalFactory).GetMethod("Create"));
mgen.Emit(OpCodes.Castclass, method.ReturnType);
mgen.Emit(OpCodes.Ret);
これは進行中の作業です。配列を作成し、それを使って何かをする準備をしているので、それを保存して(Stloc_1)、すぐにスタックにプッシュして戻すことにしました(Ldloc_1)。これらの命令はILが無効であると通知されますが、私が正しく理解していれば、これらの命令はスタックを変更しないままにする必要があります。これらの2つの指示がなければ、ILは完全に機能します。だから私は、その後のプッシュでポップが機能しない理由を理解することはできません。