我正在尝试将现有的NHibernate项目从使用MySQL移植到使用SQLite,当我尝试运行测试时,我遇到了一个有趣的错误:
1) ProductRepository_Fixture : System.MissingMethodException : Method not found: 'System.Threading.Monitor.Enter'.
我试过谷歌搜索这个错误没有运气。我认为我必须缺少某种参考 - 但我无法弄清楚是什么......
这一切都是在Mono上完成的。
我缺少什么想法?
更新:此后发现了我之前未发现的进一步错误消息:
.Missing method System.Type::op_Equality(Type,Type) in assembly /usr/lib/mono/2.0/mscorlib.dll, referenced in assembly /tmp/nunit20/ShadowCopyCache/4606_634431542912600100/Tests/assembly/shadow/fa3c43db/9b71732a_614d30f1_00000001/Mono.Data.Sqlite.dll
Missing method System.Threading.Monitor::Enter(object,bool&) in assembly /usr/lib/mono/2.0/mscorlib.dll, referenced in assembly /tmp/nunit20/ShadowCopyCache/4606_634431542912600100/Tests/assembly/shadow/fa3c43db/9b71732a_614d30f1_00000001/Mono.Data.Sqlite.dll
F Missing method System.Threading.Monitor::Enter(object,bool&) in assembly /usr/lib/mono/2.0/mscorlib.dll, referenced in assembly /tmp/nunit20/ShadowCopyCache/4606_634431542912600100/Tests/assembly/shadow/fa3c43db/9b71732a_614d30f1_00000001/Mono.Data.Sqlite.dll
Missing method System.Threading.Monitor::Enter(object,bool&) in assembly /usr/lib/mono/2.0/mscorlib.dll, referenced in assembly /tmp/nunit20/ShadowCopyCache/4606_634431542912600100/Tests/assembly/shadow/fa3c43db/9b71732a_614d30f1_00000001/Mono.Data.Sqlite.dll
.F.F.F.FMissing method System.Threading.Monitor::Enter(object,bool&) in assembly /usr/lib/mono/2.0/mscorlib.dll, referenced in assembly /tmp/nunit20/ShadowCopyCache/4606_634431542912600100/Tests/assembly/shadow/fa3c43db/9b71732a_614d30f1_00000001/Mono.Data.Sqlite.dll
答案 0 :(得分:3)
您是否引用了正确的个人资料?不幸的是,错误消息没有指定缺少哪个Monitor.Enter
方法(有几个),但我知道有些方法被添加到.NET 4.0配置文件中。如果是这种情况,那么您需要使用dmcs
编译代码以引用.NET 4.0配置文件成员;如果您使用gmcs
,那么您的目标是.NET 2.0 / 3.5配置文件。
答案 1 :(得分:1)
我在使用.Net v4.0编译的测试dll在Mono下运行NUnit时遇到了类似的问题。
我通过使用:
运行mono来指定运行时解决了这个问题 mono --runtime=v4.0 YourProgram.exe
对于NUnit与msbuild一起使用,有一个你可以修改的配置文件,请看这篇文章: http://www.dotnetjobsandcareers.com/running-nunit-tests-on-net-4-assemblies-with-msbuild/
答案 2 :(得分:0)
我通过专门引用Mono.Data.SQLite.dll的2.0版本来解决这个问题 - 这不是一个非常优雅或好的解决方案,但它可以作为一种解决方法。
仍然有兴趣听听是否有人有任何更好的建议......