我将软件从vs2008 / .net 3.5升级到vs2010 / .net 4.0。所有第三方库(最相关:nhibernate 2.1.2或3.0.0,nunit 2.5.2)仍然使用vs2008编译。当我运行我们软件的调试版本的单元测试时,一切正常。在发布版本中,nunit报告了228个测试中的33个的异常:System.InvalidProgramException : Common Language Runtime detected an invalid program.
它总是发生在nunit-console和Resharper 5.0测试运行器的相同测试中。当我使用Resharper“debug unit-tests”命令运行它们时,所有测试都通过。无论是单独运行还是批量运行,都没有区别。异常总是发生在nhibernate查询调用附近,但我不能肯定地说,因为发布构建堆栈跟踪有点稀疏。它不依赖于nhibernate字节码生成器,对于castle和linfu也会出现相同的异常。有谁知道如何调试这个?
编辑:删除Spring.NET对此问题没有影响。
编辑:当我将发布配置调试输出切换到完整而不是仅pdb 并取消激活优化代码复选框时,异常消失。这两个设置都是必需的,如果我只改变其中一个,那么bug仍然存在。但是,如果我只更改一个,则会有一组不同的测试失败。所有类库都是为 Any CPU 编译的。
答案 0 :(得分:0)
这可能是一个愚蠢的问题:您确定所有程序集都编译为相同的体系结构(x86 / x64)吗?我曾经遇到过这种情况。
答案 1 :(得分:0)
当我选择“.NET Framework 4.0 Client Profile”时,我有类似的东西。尝试将目标框架更改为“.NET Framework 4.0”
答案 2 :(得分:0)
我的应用程序也会在调试中运行,但在发布配置时会出现同样的异常。原因是我有一个带有条件“DEBUG”属性的方法,它返回一个值...
当然,在release config中,具有条件“DEBUG”属性的所有方法都将更改为没有返回值的存根。因此,IDE可能会认为您的类型通过代码分析很好,并且不提供任何警告,但编译的应用程序具有返回类型miss-matches!
以为我会在这个问题上为那些用头撞墙的人添加这个。