IBatis.NET 1.9.2 1.6.2 应用于.NET4.0,解决Ambiguous match found

时间:2021-11-19 19:48:17

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跟我要。