是否可以编写将任何类型(值和引用)的实例转换为 System.String 的通用 CIL 指令?特别是,我对将这些指令注入方法的 Mono.Cecil 代码感兴趣。
分析一个通用方法我想出了这些 Mono.Cecil 调用:(它应该将第 i 个方法参数转换为字符串)
System.Reflection.MethodInfo to_string_method_info = typeof( System.Object ).GetMethod( "ToString" );
Mono.Cecil.MethodReference to_string_reference = injectible_assembly.MainModule.Import( to_string_method_info );
Mono.Cecil.TypeReference argument_type = method_definition.Parameters[ i ].ParameterType;
method_definition.Body.Instructions.Add( processor.Create( Mono.Cecil.Cil.OpCodes.Constrained, argument_type ) );
method_definition.Body.Instructions.Add( processor.Create( Mono.Cecil.Cil.OpCodes.Callvirt, to_string_reference ) );
但是,在调试时,我从“JIT 编译器遇到内部限制”的注入方法中得到一个异常。