0

.Net 3.5 プロジェクトを .Net 4.5 にアップグレードしようとしています。すべてが機能していますが、1 つの DynamicMethod が原因で「操作によりランタイムが不安定になる可能性があります」という例外が発生します。

public static FieldSetter<TField> CreateSetFieldDelegate<TField>(FieldInfo fieldInfo)
{
    var dynamicMethod = new DynamicMethod(
      "setfast_" + fieldInfo.Name,
      null,
      new[] { typeof(object), typeof(TField) },
      fieldInfo.DeclaringType);

    var ilGenerator = dynamicMethod.GetILGenerator();

    ilGenerator.Emit(OpCodes.Ldarg_0);
    ilGenerator.Emit(OpCodes.Ldarg_1);

    ilGenerator.Emit(OpCodes.Stfld, fieldInfo);
    ilGenerator.Emit(OpCodes.Ret);

    return (FieldSetter<TField>)dynamicMethod.CreateDelegate(typeof(FieldSetter<TField>));
}

呼び出しコード

var fieldSetter = Reflection.CreateSetFieldDelegate<Guid>(_fieldInfo);

        return (dataProviderAdapter, target, values, index)
          => fieldSetter(target, dataProviderAdapter.GetGuid(values, index));

dataProviderAdapter.GetGuid(values, index) は期待どおりに system.Guid を返しますが、fieldSetter を呼び出すと、「操作によりランタイムが不安定になる可能性があります」という例外が発生します。

私は IL の経験がないので、どこからデバッグを開始すればよいかわかりません。PEVerify はエラーを返しません。どんな助けでも大歓迎です。

4

1 に答える 1