このソリューションを使用して、reflection.emit を使用して匿名型を辞書に変換していました。3.5 から .Net 4.0 に変更するまでは問題なく動作していました。
現在、「System.Security.VerificationException: 操作によりランタイムが不安定になる可能性があります」というメッセージが表示されます。エラー。
匿名で読み込まれた動的メソッドを動的アセンブリでホストされるメソッドに変換して保存し、それに対して peverify.exe を実行して何が問題なのかを調べました。
取得: [IL]: エラー: [DynamicAssemblyExample.dll : MyDynamicType::MyMethod][offs et 0x0000000D][found ref ('this' ptr) 'MyDynamicType'][expected ref '<>f__AnonymousType1`3[System.String, System.Int32,System.Byte]'] スタックに予期しない型があります。[IL]: エラー: [DynamicAssemblyExample.dll : MyDynamicType::MyMethod][offs et 0x0000000D] メソッドが表示されません。2 エラー DynamicAssemblyExample.dll の検証中
コード:
foreach (PropertyInfo property in itemType.GetProperties(attributes).Where(info => info.CanRead))
{
// load Dictionary (prepare for call later)
methIL.Emit(OpCodes.Ldloc_0);
// load key, i.e. name of the property
methIL.Emit(OpCodes.Ldstr, property.Name);
// load value of property to stack
methIL.Emit(OpCodes.Ldarg_0);
methIL.EmitCall(OpCodes.Callvirt, property.GetGetMethod(), null);
// perform boxing if necessary
if (property.PropertyType.IsValueType)
{
methIL.Emit(OpCodes.Box, property.PropertyType);
}
// stack at this point
// 1. string or null (value)
// 2. string (key)
// 3. dictionary
// ready to call dict.Add(key, value)
methIL.EmitCall(OpCodes.Callvirt, addMethod, null);
}
実際のプロパティへのポインタを逆参照する方法はありますか? それとも、どういうわけかキャストする必要がありますか?ポインタはありますか?
よろしく!