如何调试/修复“Common Language Runtime detected an invalid program”错误?它到底是什么意思?
我有一个C# MVC 2 Web应用程序,可以部署到同一IIS 7.5 Web服务器(x64)上的两个网站。其中一个是活动网站(使用发布配置部署),第二个是测试网站(使用专门为此项目创建的新Beta配置部署)。
这两个网站分别是:
Default Website/my_app
Beta/my_app
在beta网站上选择分页的采购订单列表时,会抛出“检测到无效程序”异常。但是完全相同的代码在live网站上运行正常。为什么会这样呢?
编辑:我在服务器上安装了Visual Studio,并找到了导致问题和堆栈跟踪的实际代码行。
var list = ObjectContext.ObjectSet.AsQueryable();
int totalRecords = list.Count();
var paged = list.Skip((page > 0 ? page - 1 : 0) * rows).Take(rows);
这是带有堆栈跟踪的异常信息:
{System.InvalidProgramException: Common Language Runtime detected an invalid program.
at System.Data.Entity.DynamicProxies.PurchaseOrderListVie_96479BFE9FA60F4C53137C56C1A1B2A11D90FF5AFFDC20383CC68E0A750792E3.set_Total(Decimal )
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at MyApp.Controllers.PurchaseOrderController.GetPurchaseOrderList(Int32 page, Int32 rows, String sidx, String sord) in C:\src\MyApp.2010\MyApp.UI\Controllers\PurchaseOrder\List.cs:line 11}
这些新信息准确指出了问题所在,但并没有说明问题具体是什么。希望熟悉Entity Framework的专业人士能够解决这个问题。
System.Data.Entity.DynamicProxies.PurchaseOrderListVie_96479B_etc.set_Total(Decimal )
错误发生的地方在这一行。我在SQL管理工具中运行了查询,结果不为空,Total也不为空。那么为什么调用set_Total()时会出现问题呢?
这是POCO如何定义Total字段(由T4模板生成):
[Decimal] [Required] [DisplayName("Total")]
public virtual decimal Total
{
get;set;
}
Live网站和Beta网站的主要区别在于构建配置。但是两种配置都将每个项目设置为“Any CPU”。
我们所有的开发机和服务器都是64位的。网站的IIS配置之间可能会有差异吗?
我尝试运行PEVerify,但它只显示“已验证所有类和方法”。PEVerify如何帮助解决这种问题?
顺便说一句,我看到有大约15个标题包含“Common Language Runtime detected an invalid program problem”的问题。我的问题不是重复的,它具有与其他具有类似标题的问题不同的几个独特特征(其中只有一个问题与Entity Framework有关 - 其余问题涉及Reflection或TFS)。