C # Entity Framework 4 Common Среда языковой поддержки обнаружила ошибку недопустимой программы?

Как отлаживать / исправлять ошибку «Среда выполнения Common Language Runtime обнаружила недопустимую программу»? Что именно это означает?

У меня есть веб-приложение C # MVC 2, которое можно развернуть на двух веб-сайтах, находящихся на одном и том же веб-сервере IIS 7.5 (x64). Один - это действующий сайт (развернутый с использованием конфигурации выпуска), второй - бета-сайт (развернутый с использованием новой бета-конфигурации, созданной специально для этого проекта).

Эти два веб-сайта:

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}

Это новая информация показывает, в чем именно проблема, но не в чем проблема. Надеюсь, кто-то, кто очень хорошо знает структуру Entity, сможет пролить свет на это:

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;
}

Основное различие между действующим и бета-сайтом - это конфигурация сборки. Но в обеих конфигурациях для каждого проекта установлено значение «Any CPU».

Все наши машины и серверы для разработки 64-разрядные. Может быть какая-то разница между конфигурацией IIS веб-сайтов, вызывающих это?

Я пробовал запустить PEVerify, но он просто говорит: «Все классы и методы проверены». Как PEVerify может помочь с этим типом проблемы?

Кстати, я вижу, что есть около 15 вопросов с заголовком «Common Language Runtime обнаружила недопустимую программную проблему». Мой вопрос не является дубликатом и имеет несколько уникальных функций, которые отличаются от других вопросов с похожим названием (и только один из этих 15 вопросов тоже касается Entity Framework - остальные относятся к Reflection или TFS)

8
задан JK. 19 July 2011 в 21:15
поделиться