发布版本中的nunit:“公共语言运行时检测到无效程序。”

我将软件从vs2008 / .net 3.5升级到vs2010 / .net 4.0。 所有第三方库(最相关:nhibernate 2.1.2或3.0.0,nunit 2.5.2)仍然使用vs2008进行编译。 当我运行我们软件的调试版本的unit testing时,一切正常。 在发布版本中,nunit报告228个测试中的33个的exception: System.InvalidProgramException : Common Language Runtime detected an invalid program. 对于nunit-console和Resharper 5.0测试运行器,它总是在相同的测试中发生。 当我使用Resharper“debug unit-tests”命令运行它们时,所有测试都通过。 无论是单独运行还是批量运行,都没有区别。 exception总是发生在nhibernate查询调用附近,但我不能肯定地说,因为发布构建堆栈跟踪有点稀疏。 它不依赖于nhibernate字节码生成器,对于castle和linfu也会出现相同的exception。 有谁知道如何调试这个?

编辑:删除Spring.NET对此问题没有影响。

编辑:当我将release config debug输出切换为full而不是pdb并停用优化代码复选框时,exception消失。 这两个设置都是必需的,如果我只改变其中一个,那么bug仍然存在。 但是,如果我只更改一个,则会有一组不同的测试失败。 所有类库都是针对Any CPU编译的。

这可能是一个愚蠢的问题:您确定所有程序集都编译为相同的体系结构(x86 / x64)吗? 我曾经遇到过这个问题。

当我选择“.NET Framework 4.0 Client Profile”时,我有类似的东西。 尝试将目标框架更改为“.NET Framework 4.0”

我的应用程序也会在调试中运行,但在发布配置时会出现同样的exception。 原因是我有一个条件“DEBUG”属性的方法,它返回一个值…

当然,在release config中,具有条件“DEBUG”属性的所有方法都将更改为没有返回值的存根。 因此,IDE可能会认为您的类型通过代码分析很好,并且不提供任何警告,但编译的应用程序具有返回类型未命中匹配!

我以为我会在这个问题上为那些用头撞墙的人加上这个。