我将我们的软件从vs2008/.net 3.5升级到vs2010/.net 4.0。所有第三方库(最相关的是nhibernate 2.1.2或3.0.0,nunit 2.5.2)仍然使用vs2008编译。当我运行调试构建的单元测试时,一切正常。在发布版本中,nunit报告228个测试中有33个异常:
编辑:删除Spring.NET对此问题没有影响。
编辑:当我将发布配置调试输出从pdb only更改为full并取消optimize code复选框时,异常消失了。这两个设置都是必需的,如果我只更改其中一个,错误仍然存在。然而,如果我只更改一个设置,将会有不同的测试失败。所有类库都是编译为Any CPU。
System.InvalidProgramException:Common Language Runtime检测到无效程序。
它总是发生在相同的测试中,对于nunit-console和Resharper 5.0测试运行器都是如此。当我使用Resharper“debug unit-tests”命令运行它们时,所有测试都通过。无论我是单独运行测试还是批量运行,都没有区别。异常总是发生在nhibernate查询调用附近,但由于发布版本堆栈跟踪有些稀疏,所以我不能确定。它不取决于nhibernate字节码生成器,对于castle和linfu也是如此。是否有人有想法如何调试这个问题?编辑:删除Spring.NET对此问题没有影响。
编辑:当我将发布配置调试输出从pdb only更改为full并取消optimize code复选框时,异常消失了。这两个设置都是必需的,如果我只更改其中一个,错误仍然存在。然而,如果我只更改一个设置,将会有不同的测试失败。所有类库都是编译为Any CPU。