asp.net mvc - c#实体框架4公共语言运行库检测到一个无效程序错误

本文关键字:一个 错误 程序 无效 检测 mvc net 实体 框架 运行 公共语言 | 更新日期: 2023-09-27 18:01:59

如何调试/修复"公共语言运行时检测到无效程序"错误?这到底是什么意思?

我有一个c# MVC 2 web应用程序,可以部署到驻留在同一个IIS 7.5 web服务器(x64)上的两个网站。一个是活动站点(使用发布配置进行部署),第二个是beta站点(使用为这个项目创建的新beta配置进行部署)。

这两个网站分别是:

Default Website/my_app
Beta/my_app

在测试版站点上,当选择采购订单的页面列表时,会抛出"检测到无效程序"异常。完全相同的代码,当运行在现场工作完美。它为什么要这么做?

编辑:我在服务器上安装了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}

这个新信息确切地显示了问题在哪里,但不是问题是什么。希望有非常了解实体框架的人可以阐明这一点:

System.Data.Entity.DynamicProxies.PurchaseOrderListVie_96479B_etc.set_Total(Decimal )

是发生错误的行。现在我在sql管理工作室运行查询,结果不是null, Total也不是null。那么为什么它在调用set_Total()时会出现问题呢?

POCO是这样定义Total字段的(由T4模板生成):

[Decimal] [Required] [DisplayName("Total")]
public virtual decimal Total
{
    get;set;
}

活动站点和测试站点之间的主要区别是构建配置。但这两种配置都将每个项目设置为"任意CPU"。

我们所有的开发机器和服务器都是64位的。会不会是网站的IIS配置不同导致了这个问题?

我试过运行PEVerify -但它只是说"所有类和方法验证。"PEVerify如何帮助解决这类问题?

顺便说一句,我可以看到在标题中有大约15个问题"公共语言运行时检测到无效程序问题"。我的问题不是重复的,并且有几个独特的功能,与其他具有类似标题的问题不同(这15个问题中只有一个是关于实体框架的-其余的都是关于反射或TFS)

asp.net mvc - c#实体框架4公共语言运行库检测到一个无效程序错误

我今天在QA环境中部署一个实现实体4链接的web应用程序时遇到了这个问题。问题原来是Windows 2008 R2服务器上的IIS设置。日志含义在应用池的"高级设置"下,"启用32位应用程序"设置为False。我将其设置为True,现在我的应用程序就像它在开发服务器上一样工作,这恰好是一台Windows 2003服务器。

对于我来说,当我向实体模型添加视图时发生了这种情况。默认情况下,设计器将所有列的"实体键"属性设置为true。当我将所有十进制/数字列设置为false时,错误就消失了。助教

您是否尝试在另一台机器上部署beta配置?你的应用程序设置是相同的(即,经典vs集成,相同的。net版本)?您是否尝试过清理解决方案并将其重新部署到新位置?您是否尝试过将beta版本部署到发布位置?(发布前务必删除所有文件;我很好奇是否有一个剩余的动态加载依赖,可能会导致问题)

更新:

很好,写了更多的信息。在第3行,您定义了变量page,同时还使用了先前定义的名为page的变量。它是如何编译的?试着注释掉这些代码,或者至少试着不跳过。

注意:我认为Count()后面跟着Take()可能执行了两次查询。

注2:我只使用了EntityFramework v4 Database First开发,但我不记得直接针对ObjectSet编程。通常它是你的实体类(例如,MyContext.Orders)…也许在针对那个对象的编程中发生了一些事情,并设置了一个Decimal值。模型上是否有任何属性使得它是非标准的?

存在一个重大bug!!,我认为它是在实体框架中具有十进制字段列属性,

我遇到了这个讨厌的错误消息,我比较了从2个单独的表(相同的表)获取数据,一个具有整数列ID,另一个具有十进制列ID,

的整数列表,没有问题相同的代码运行完美,对于带有小数列的表,将弹出此错误消息我已经检查了SQL server iis和环境,我甚至想格式化pc,这很奇怪,错误信息不清楚。

相关文章: