AccessViolationException не было обработано

Я пытаюсь использовать сообщение в блоге Стива Сандерсона для редактирования списка переменной длины в представлении ASP MVC 3. Проект строится нормально, однако всякий раз, когда частичное представление отображается, программа взрывается на строке using(Html.BeginColletionItem() с этой ошибкой:

AccessViolationException was unhandled
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Вот скриншот полного исключения

введите здесь описание изображения

Полная трассировка стека ниже

at Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Connection conn)
at Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(Object acceptedSocket)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Частичный просмотр

@model Monet.Models.AgentRelationshipCodes


@using (Html.BeginCollectionItem("AgentRelationshipCodes")) @*Exception thrown here*@
{
    <tr>
        <td>@Html.EditorFor(model => model.EffectiveDate, "NullableDate", new { @class = "relCodeDate2" })</td>
        <td>@Html.EditorFor(model => model.RelationshipId, "NullableDate", new { @class = "relDistCode1", maxlength = 3 })</td>
        @Html.HiddenFor(model => model.ID)
        @Html.HiddenFor(model => model.RelCodeOrdinal)
    </tr>
}

Просмотреть

    <script>
    $(document).ready(function() {
        $(".addCode").click(function () {
                $.ajax({
                url: '@Url.Action("NewRelationshipCode", "AgentTransmission")',
                dataType: 'html',
                cache: false,
                success: function (html) {
                    console.log(html);
                    $("#Experiment > tbody").append(html);
                }
            })
        });
    });
    </script>
    .
    .
<fieldset>
    <legend>Relationship Codes</legend>
    <table id="Experiment">
        <thead>
            <tr>
                <th>Relationship Effective Date</th>
                <th>Relationship Dist Code</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.AgentRelationshipCodes)
            {
                @Html.Partial("AddRelationshipCodePartial", item)
            }
        </tbody>
    </table>
    <br/>
    <a href="javascript:void(0)" class ="addCode">Add Another</a>
</fieldset>

Контроллер

    [HandleProcessCorruptedStateExceptions]
    public ViewResult NewRelationshipCode()
    {
        return View("AddRelationshipCodePartial", new AgentRelationshipCodes());
    }

Коды отношений агентов

namespace Monet.Models
{
    using System;
    using System.Collections.Generic;

    public partial class AgentRelationshipCodes
    {
        public int ID { get; set; }
        public int RelCodeOrdinal { get; set; }
        public string RelationshipId { get; set; }
        public Nullable<System.DateTime> EffectiveDate { get; set; }
        public System.DateTime LastChangeDate { get; set; }
        public string LastChangeId { get; set; }

        public virtual AgentTransmission AgentTransmission { get; set; }
    }
}

ИЗМЕНИТЬ

Мне удалось заставить демо работать в проекте за пределами решения, которое я использую прямо сейчас, поэтому, очевидно, это связано с некоторыми dll в этой рабочей области. Однако теперь я выше своего уровня заработной платы, так как не знаю, как отлаживать что-то подобное. Вот исключения, которые идентифицируются WinDbg до того, как Visual Studio выдаст ошибку AccessViolationException. Существует МНОГО информации между выбрасываемыми исключениями, если это кому-то нужно, пожалуйста, дайте мне знать.

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\d12f4fda3d1bfabf888342e96983e9a7\mscorlib.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\d12f4fda3d1bfabf888342e96983e9a7\mscorlib.ni.dll

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Xaml\9d3572e8c3c314a0f12383d41e8bee78\System.Xaml.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Xaml\9d3572e8c3c314a0f12383d41e8bee78\System.Xaml.ni.dll

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\Presentatio5ae0f00f#\8711b01d60a94d6ef6a02d7fd0578493\PresentationFramework.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\Presentatio5ae0f00f#\8711b01d60a94d6ef6a02d7fd0578493\PresentationFramework.ni.dll

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\WindowsBase\ac2e26bafa70e93b307087d7fe6b9dd2\WindowsBase.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\WindowsBase\ac2e26bafa70e93b307087d7fe6b9dd2\WindowsBase.ni.dll

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V4e91a071#\207156ac71b58fb31310a2f78c3d0c44\Microsoft.VisualStudio.Web.Application.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V4e91a071#\207156ac71b58fb31310a2f78c3d0c44\Microsoft.VisualStudio.Web.Application.ni.dll

ОБНОВЛЕНИЕ

Выбрав опцию «Собственный код» в меню «Отладчики» проекта.

введите здесь описание изображения

Теперь я получаю немного более подробное сообщение об ошибке:

введите здесь описание изображения

Наконец, переключившись на IIS Express, как предложено ниже, я все еще получаю ошибку AccessViolationException. Вот настройки, которые я использовал для включения IIS для отладки (в свойствах проекта)

введите здесь описание изображения

Вот сообщение об ошибке

введите здесь описание изображения

Стек вызовов:

введите здесь описание изображения


person NealR    schedule 02.05.2014    source источник
comment
AccessViolationException означает неуправляемый компонент (фактически любую нативную DLL... например, virtualbox.org/ticket/9317), используемый ProcessRequest, завершился внутренним сбоем. Нужно прицепиться с отладчиком, чем можно сделать дамп нативных фреймов, например WinDbg, чтобы определить первопричину проблемы, хотя бы найти подозрительную DLL.   -  person Simon Mourier    schedule 15.05.2014
comment
Попробуйте удалить ссылки и вместо этого используйте самородок   -  person AntoineLev    schedule 16.05.2014
comment
У вас установлены сторонние инструменты VS/Code?   -  person Mikhail    schedule 17.05.2014
comment
если вы запустите его демонстрационный проект, то вы узнаете, что это ошибка вне этого фрагмента кода. посмотрите на неуправляемые dll (может быть, web gl?)   -  person John Nicholas    schedule 19.05.2014
comment
Вероятно, было бы полезно показать нам модель AgentRelationshipCodes, особенно конструктор.   -  person Paul Zahra    schedule 20.05.2014
comment
@PaulZahra - только что добавил модель в пост   -  person NealR    schedule 20.05.2014
comment
Что если вы используете IIS/IIS Express вместо Visual Studio Development Server?   -  person haim770    schedule 12.06.2014
comment
Сэр, пожалуйста, взгляните на этот память, защищенная от чтения или записи, это часто указывает на то, что это другое?forum=csharpgeneral" rel="nofollow noreferrer">ссылка   -  person Rex    schedule 12.06.2014
comment
Неуправляемый код вызывает это исключение   -  person Rex    schedule 12.06.2014
comment
@SimonMourier - как мне использовать WinDbg для этой цели? Обновил сообщение с ошибкой, которую он выдает, когда происходит AccessViolationException.   -  person NealR    schedule 12.06.2014
comment
Вам нужно погуглить на Windbg и SOS, например: netmatze.wordpress.com/2012/08/24/   -  person Simon Mourier    schedule 13.06.2014
comment
Как сказал haim770, вы должны использовать IIS Express вместо Cassini. Держу пари, что проблема исчезнет.   -  person Erik Philips    schedule 13.06.2014
comment
@ErikPhilips - только что обновил пост. Я переключился на IIS и получил такое же сообщение об ошибке.   -  person NealR    schedule 13.06.2014
comment
@NealR Я не уверен, как это может быть, поскольку я на 99,99% уверен, что Cassini - ЕДИНСТВЕННАЯ программа, которая использует WebDev.WebHost40.dll. Получаете ли вы такое же исключение в той же сборке/dll?   -  person Erik Philips    schedule 13.06.2014
comment
@ErikPhilips - я не уверен, что это одна и та же .dll, но это то же исключение. Просто добавил сообщение об ошибке в свой пост.   -  person NealR    schedule 13.06.2014
comment
Можете ли вы включить трассировку стека? Используете ли вы ЛЮБЫЕ сборки/dll от третьих лиц (все, что не напрямую от Microsoft). Ваша конкретная ошибка: 0x80004003 E_Pointer — недействительный указатель.   -  person Erik Philips    schedule 13.06.2014
comment
@ErikPhilips - я не знаю, как получить для этого трассировку стека. Ближе всего я подошёл к сообщениям в первом EDIT от WinDbg. Это приложение MVC, которое использует плагин BeginCollectionItem в частичном представлении. Ошибка возникает в статусе using для этого плагина в представлении. Если я смогу понять, как получить оттуда трассировку стека, я опубликую ее. И да, я использую пару сторонних плагинов: EPPlus, Automapper и BeginCollectionItem.   -  person NealR    schedule 13.06.2014
comment
@ErikPhilips - Извините, забыл, что Исключения StackTrace уже были доступны в сообщении.   -  person NealR    schedule 13.06.2014
comment
Давайте продолжим обсуждение в чате.   -  person Erik Philips    schedule 13.06.2014
comment
Есть ли причина для использования объекта рендеринга NullableDate при рендеринге строкового свойства RelationshipId?   -  person Zibadian    schedule 06.10.2014


Ответы (1)


Мне кажется, ты работаешь усерднее, чем нужно.

Во-первых, замените foreach циклом for, передавая индексированный элемент в шаблон редактора. Это установит контекст вашего шаблона.

<fieldset>
    <legend>Relationship Codes</legend>
    <table id="Experiment">
        <thead>
            <tr>
                <th>Relationship Effective Date</th>
                <th>Relationship Dist Code</th>
            </tr>
        </thead>
        <tbody>
            @for (var i = 0; i < Model.AgentRelationshipCodes.Count(); i++)
            {
                @Html.EditorFor(model => model.AgentRelationshipCodes[i])
            }
        </tbody>
    </table>
    <br/>
    <a href="javascript:void(0)" class ="addCode">Add Another</a>
</fieldset>

Затем создайте шаблон редактора с именем AgentRelationshipCodes.cshtml (в Views/Shared/EditorTemplates).

@model Monet.Models.AgentRelationshipCodes
<tr>
    <td>@Html.EditorFor(model => model.EffectiveDate, "NullableDate", new { @class = "relCodeDate2" })</td>
    <td>@Html.EditorFor(model => model.RelationshipId, "NullableDate", new { @class = "relDistCode1", maxlength = 3 })</td>
    @Html.HiddenFor(model => model.ID)
    @Html.HiddenFor(model => model.RelCodeOrdinal)
</tr>

Это устраняет необходимость в пользовательских помощниках, которые, по-видимому, вызывают проблему.

Наконец, для добавления новых элементов переместите набор полей в частичное:

<script>
    $(document).ready(function() {
       $(".addCode").click(function () {
            $('#fieldset').load('@Url.Action("NewRelationshipCode", "AgentTransmission")',$('#fieldset').closest('form').serialize());
       });
    });
</script>

<div id="fieldset">
   @Html.Partial("fieldset");
</div>

И верните представление набора полей из вашего метода действия NewRelationshipCode:

[HandleProcessCorruptedStateExceptions]
public ViewResult NewRelationshipCode(YourViewModel model)
{
    model.AgentRelationshipCodes.Add(new AgentRelationshipCodes());
    return View("fieldset", model);
}
person B2K    schedule 30.12.2014