Как отладить / исправить ошибку «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 Framework, сможет пролить свет на это:
System.Data.Entity.DynamicProxies.PurchaseOrderListVie_96479B_etc.set_Total(Decimal )
Строка, где происходит ошибка.Теперь я выполнил запрос в sql management studio, и результат не был нулевым, и Total также не был нулевым.Так почему же возникла проблема с вызовом set_Total ()?
Вот как POCO определяет поле Total (генерируемое шаблоном T4):
[Decimal] [Required] [DisplayName("Total")]
public virtual decimal Total
{
get;set;
}
Основное различие между живымии бета-сайты - это конфигурация сборки.Но в обеих конфигурациях каждый проект настроен на «Любой процессор».
Все наши машины и серверы для разработки являются 64-битными.Может ли быть какая-то разница между конфигурацией IIS веб-сайтов, которая вызывает это?
Я пытался запустить PEVerify, но он просто говорит: «Все классы и методы проверены».Как может PEVerify помочь с этим типом проблемы?
Кстати, я вижу, что есть около 15 вопросов с «Common Language Runtime обнаружил недопустимую проблему программы» в названии.Мой вопрос не является дубликатом и имеет несколько уникальных функций, которые отличаются от других вопросов с похожим названием (и только один из этих 15 относится также к Entity Framework - остальные относятся к Reflection или TFS)