2010-11-05 3 views
4

Все,InvalidProgramException: Common Language Runtime обнаружила недопустимую программу

У меня возникла проблема с развертыванием веб-страницы ASP.NET 4.0. Ошибка

System.InvalidProgramException: Common Language Runtime обнаружен недопустимый программы

ошибка происходит на IIS7 на 64 разрядном поле с сервера Windows. Эта же страница работает на IIS7 в моем окне разработки (32-разрядная Windows 7) и в среде разработки Visual Studio. Я не знаю никаких различий в конфигурации IIS7.

Я использовал PEVerify для проверки DLL в каталоге bin приложения.

Я могу воспроизвести проблему, используя запрос Entity Framework для заполнения DataGrid.DataSource. Это не очень тяжелый запрос.

Любые идеи о том, что может быть причиной этого? Мой следующий шаг - попытаться использовать только используемые запросы.

Спасибо за любую помощь.

ответ

4

Это похоже, что это связано с первичным ключом типа DECIMAL (1,0).

+0

У меня был составленный первичный ключ (созданный дизайнером EF) на представлении. Один из столбцов был десятичным - BAM, ошибка :). Исправлена ​​ошибка удаления десятичного столбца в качестве первичного ключа. Спасибо – sirrocco

+1

+ 1 - Я столкнулся с той же проблемой. Я составил модель из представления, и разработчик автоматически предположил, что куча полей (включая десятичную) является частью ключа сущности. После прочтения этого сообщения я проверил свойства модели и вручную удалил неправильные поля из ключа набора объектов. Это полностью устранило проблему. Благодаря! – dotariel

+0

+1 XSaint32, мне не пришло в голову проверить, что VS автоматически установил дополнительные столбцы как часть ключа сущности, поскольку я * знал * ключ был единственным столбцом. Должен любить время, чтобы раковина стала такой. – Tedford

1

Я думаю, что это может быть ряд проблем. В зависимости от вашей модели Entity Framework и того, насколько она велика/сложна, вы можете столкнуться с лимитом JIT compiler. Это относится к версии 2.0, поэтому оно может применяться и к 4.0.

Предполагая, что у вас нет каких-либо огромных методов, вы скомпилировали сборку для любого процессора? Если вы указали процессор, то несоответствие между 32/64 бит вызовет проблемы. Попробуйте повторить с Any CPU.

Сообщите мне, если это работает.

Erick

+0

Модель данных не очень большая или сложная (~ 25 объектов). CPU скомпилирован для любого CPU. Мое понимание проблемы 2.0 состоит в том, что было горячее исправление для ограничения локальной переменной до 4 миллионов. Я предполагаю (надеюсь), что не было упущено при создании 4.0. – HatAndBeard

0

У меня такая же ошибка на строке кода, которая была без ошибок в течение нескольких месяцев. К счастью, я смог вернуть свои изменения в рабочее состояние и повторить шаги. Оказывается, это была строка кода в том же корпусе Task.Run(), который вызывал ошибку. Что страшно в том, что в коде ничего не случилось: var test = user.objectId.HasValue;, но как только я удалю эту строку, ошибка исчезла.

public virtual Task<IList<string>> GetRolesAsync(TUser user) { 
     if (user == null) 
      throw new ArgumentNullException("user"); 
     return Task.Run(() => { 
      var test = user.objectId.HasValue; 
      var userRolesQuery = objectManager.buildQueryByFilter<List<security.UserRole>>("user = '{0}'", user.objectId); 
      objectManager.buildSubquery<TRole>("role", userRolesQuery); 
      var userRoles = objectManager.openByQuery<List<security.UserRole>>(userRolesQuery); 
      return (IList<string>)userRoles.Select(userRole => userRole.role.name).ToList(); 
     }); 
    } 
Смежные вопросы