C# Entity Framework 4 Common Language Runtime 检测到无效程序错误?

标签 c# asp.net-mvc linq entity-framework clr

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

我有一个 C# MVC 2 网络应用程序,它可以部署到位于同一 IIS 7.5 网络服务器 (x64) 上的两个网站。一个是实时站点(使用 Release 配置部署),第二个是 beta 站点(使用专为此项目创建的新 Beta 配置部署)。

这两个网站是:

Default Website/my_app
Beta/my_app

在Beta站点选择“采购订单”列表时,它会抛出“检测到无效程序”异常(exception)。在实时站点上运行时完全相同的代码可以完美运行。为什么要这样做?

编辑:我在服务器上安装了 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 management studio 中运行查询,结果不为 null,Total 也不为 null。那么为什么调用 set_Total() 会出现问题?

这是 POCO 定义总计字段的方式(由 T4 模板生成):

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

实时站点和测试站点之间的主要区别在于构建配置。但是这两种配置都将每个项目都设置为“任何 CPU”。

我们所有的开发机器和服务器都是 64 位的。导致此问题的网站的 IIS 配置是否存在差异?

我试过运行 PEVerify - 但它只显示“所有类和方法已验证”。 PEVerify 如何帮助解决此类问题?

顺便说一句,我可以看到大约有 15 个问题的标题是“公共(public)语言运行时检测到一个无效的程序问题”。我的问题不是重复的,并且有几个独特的功能,这些功能不同于具有类似标题的其他问题(这 15 个问题中只有一个也是关于 Entity Framework 的——其余的是关于反射或 TFS 的)

最佳答案

我今天在将实现 linq to entity 4 的 web 应用程序部署到我们的 QA 环境时遇到了这个问题。问题原来是 Windows 2008 R2 服务器上的 IIS 设置。在应用程序池的高级设置下,启用 32 位应用程序的设置被设置为 False。我将其设置为 True,现在我的应用程序可以像在恰好是 Windows 2003 服务器的开发服务器上一样工作。我希望这会有所帮助。

关于C# Entity Framework 4 Common Language Runtime 检测到无效程序错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673404/

相关文章:

c# - 排除另一个 LINQ 查询中一个查询的 LINQ 结果

c# - 如何从泛型类或方法的成员获取 T 的类型

asp.net-mvc - ASP.Net MVC4 将 "create view"绑定(bind)到包含 List 的模型

c# - 集合中集合的 Where 子句

entity-framework - Entity Framework 5.0 First 或 Group By Issue - 从 2.2 升级到 5.0 之后

c# - 使用 Linq to sql 在子表中插入数据(3 层架构)

c# - 在 LINQ 中使用 select new 返回列表

c# - CaSTLe DynamicProxy 接口(interface)代理生成

c# - 如何在 ASP.NET MVC 中的单元测试中分配 BaseController 值

c# - 在 Visual Studio 的同一端口上运行两个应用程序