C # Entity Framework 4 Common Language Runtime обнаружил недопустимую ошибку программы? - PullRequest
7 голосов
/ 13 июля 2011

Как отладить / исправить ошибку «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)

Ответы [ 4 ]

19 голосов
/ 19 июля 2011

Я столкнулся с этой проблемой сегодня, когда развернул веб-приложение, реализующее linq to entity 4, в нашей среде QA. Проблема оказалась в настройках IIS на сервере Windows 2008 R2. В разделе «Дополнительные параметры для пула приложений» для параметра «Включить 32-разрядные приложения» задано значение «Ложь». Я установил для него значение True, и теперь мое приложение работает так же, как и на сервере разработки, который оказался сервером Windows 2003. Надеюсь, это поможет.

2 голосов
/ 25 января 2012

Для меня это произошло, когда я добавил представление к своей модели сущности. По умолчанию дизайнер устанавливает для свойства столбца Entity Key значение true. Когда я устанавливаю значение false для всех десятичных / числовых столбцов, ошибка исчезает. Тас

1 голос
/ 13 июля 2011

Вы пытались развернуть бета-конфигурацию на другом компьютере?Ваши настройки apppools должны быть одинаковыми (то есть, классическая или интегрированная, та же версия .net)?Вы пытались очистить раствор и перенести его в новое место?Вы пытались развернуть бета-сборку, чтобы освободить место?(убедитесь, что удалили все файлы перед публикацией; мне интересно, если есть оставшаяся динамически загружаемая зависимость, которая может вызывать проблемы)

ОБНОВЛЕНИЕ:

Отлично, больше информации.В строке 3 вы определяете переменную страницу, а также используете ранее определенную переменную с именем page.Как это компилируется?Попробуйте закомментировать этот код или хотя бы попробуйте без пропуска.

ПРИМЕЧАНИЕ. Я думаю, что Count (), за которым следует Take (), может выполнить запрос дважды.

ПРИМЕЧАНИЕ 2. Я использовал только разработку EntityFramework v4 Database First, но яне помню, чтобы программирование напрямую с ObjectSet.Обычно это класс вашей сущности (например, MyContext.Orders) ... Возможно, что-то происходит с программированием этого объекта и установкой десятичного значения.Есть ли какие-либо свойства в модели для этого свойства, которые делают его нестандартным?

0 голосов
/ 28 октября 2011

есть серьезная ошибка !!, я думаю, что при наличии свойства столбца десятичного поля в платформе Entity,

я столкнулся с этой неприятной ошибкой, я сравнил получение данных из 2 отдельных таблиц (тех же таблиц), один с целочисленным идентификатором столбца, а другой с десятичным идентификатором столбца,

для таблицы с целочисленным столбцом, без проблем тот же код выполняется отлично, для таблицы с десятичным столбцом это сообщение об ошибке выскакиваетЯ сделал проверки на сервере SQL и IIS и окружающей среды, и я даже хотел отформатировать ПК, это очень странно, и ошибка MSG не ясно.

надеюсь, что такой подход поможет любому, кто столкнется с такой ошибкой в ​​будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...