IBatis.NET 1.9.2 1.6.2 应用于.NET4.0,解决Ambiguous match found
前几天在试验将IBatis.NET 1.92 1.6.2版本的库在.NET 4.0下应用。结果发现总是报错:
Ambiguous match found
找了很多资料,说是因为在.NET Framework 4.0以上版本中Monitor的Enter函数新增加了一个重载版本,导致原先Castle.DynamicProxy中的LockBlockExpression在Emit时获取Enter函数从出现歧义,需求修改:
gen.Emit(OpCodes.Call, typeof(Monitor).GetMethod(“Enter”));
为
gen.Emit(OpCodes.Call, typeof(Monitor).GetMethod(“Enter”, new Type[] { typeof(Object) }));
因为没有Castle.DynamicProxy的源码,就直接反编译,然后再从IBatis.NET的GOOGLE CODE上下载了1.6.2的源码(在TAG目录)。
整体重新编译即可。
注意:在Castle.DynamicProxy的ModuleScope.cs中的第38行有一然代码为:
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Castle.DynamicProxy.DynProxy.snk"))
需要Castle.DynamicProxy.DynProxy.snk这个文件,而且反编译后的代码并不存在,但在反编译的根目录下有一个叫CastleXXX.snk的文件,将文件名改为Castle.DynamicProxy.DynProxy.snk就可以了。再重新编译就可以使用了。否则会报对象为空的错误。
嫌麻烦不想自己编译的,可以直接加Q:44588199跟我要。