发行版上的单元:“公共语言运行时检测到无效程序。”

问题描述 投票:6回答:3

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

编辑:删除Spring.NET对此问题无效。

编辑:当我将发布配置调试输出切换到完整而不是仅pdb并停用优化代码复选框时,异常消失。这两个设置都是必需的,如果仅更改其中一个,则该错误仍然存​​在。但是,如果仅更改一项,则另一组测试将失败。所有类库均针对Any CPU

进行编译。
c# .net nhibernate nunit
3个回答
0
投票

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


0
投票

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


0
投票

我的应用程序也将在调试中运行,但在发行版配置上会发生相同的异常而崩溃。原因是我有一个带有条件“ DEBUG”属性的方法,该方法返回一个值...

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

只是想为那些因这个问题而将自己的头撞在墙上的人添加这个。

© www.soinside.com 2019 - 2024. All rights reserved.