общеязыковая среда выполнения не смогла установить точку останова - PullRequest
28 голосов
/ 20 декабря 2011

Это на самом деле другая часть этого вопроса.

Ошибка установки контрольных точек, но только в некоторых строках при отладке

Я удаленно отлаживаю плагин CRM 2011 в версии 2010.

В одном из моих исходных файлов я могу установить точку останова во всем коде, кроме нескольких мест.

Когда я пытаюсь установить точку останова, я получаю эту ошибку «Следующая точка останова не может быть установлена:» и «Среде исполнения языка не удалось установить точку останова».

protected override void ExecutePlugin()
{
    SetStateResponse response = new SetStateResponse(); // Breakpoint works

    // Message switch
    switch (_crmMessage) // Breakpoint error
    {
        case CrmPluginMessageEnum.Create:

        Entity pimage = null; // Breakpoint error
        if (_context.PostEntityImages.ContainsKey("postcreate")) // Breakpoint works
            pimage = _context.PostEntityImages["postcreate"]; // Breakpoint error

        break; // Breakpoint error
        }
} // Breakpoint error

UPDATE Кроме того, в окне модулей он показывает dll как Оптимизированный: Нет Код пользователя: Да Статус символа: Символы загружены

Ответы [ 7 ]

34 голосов
/ 18 июля 2013

Две возможности, на которые уже ссылались другие ответы:

  1. Убедитесь, что вы используете сборку Debug вместо сборки Release, потому что сборка Release удалит или оптимизирует вашу сборку.код.
  2. Убедитесь, что вы обновляете версию при каждом развертывании сборок в Visual Studio (на вкладке свойств проекта).При увеличении версии CRM обязательно выгрузит старую версию сборки и перезагрузит новую без сброса IIS.
4 голосов
/ 11 июля 2018

У меня возникла эта проблема, когда я создал точку останова с помощью ярлыка Ctrl+B (см. Прикрепленное изображение), и я ввел имя функции, которой не существует, поэтому точка останова была добавлена, но вызвала ошибку.потом каждый раз, когда я запускал проект, появлялась эта ошибка.

Решение: Я удалил точку останова из списка точек останова (см. Левое нижнее изображение в приложении), выберите раздел точек останова, затем выберите элемент и нажмите «Удалить».enter image description here

Если вы не видите раздел точек останова

Вы можете получить его, нажав Ctrl+Alt+B

4 голосов
/ 03 апреля 2012

У меня была такая же проблема, когда у меня был проект, открытый в двух экземплярах Visual Studio. Проект, который я не отлаживал, имел блокировку файла и уведомлял меня: «Этот файл был изменен вне редактора исходного кода». После принятия изменений в моем решении без отладки я больше не получал ошибку, и мои контрольные точки были достигнуты в моем решении, которое я отлаживал.

Похоже, есть много возможных причин этой ошибки, но это сделало это для меня.

0 голосов
/ 17 ноября 2017

Я получил эту ошибку при запуске отладки проекта, и я решаю ее с помощью Clean All Project и Rebuild All Project, после перестройки ошибка исчезает.

0 голосов
/ 18 июля 2013

Другая причина этой проблемы, которую я только что обнаружил, если вы отлаживаете в CRM, не обновляет точки регистрации плагина.Даже если вы скопируете новые библиотеки DLL на целевой компьютер и подключитесь к этому процессу удаленно, это не будет DLL-библиотека, которую будет использовать CRM.CRM будет пытаться взять копию старой версии из своей базы данных, пока вы не перезапустите регистрацию плагина.

Ошибка, которая потратила на меня полтора дня!

0 голосов
/ 19 января 2013

У меня просто был похожий опыт, и способ, которым я проходил через него, заключался в том, чтобы поставить точку останова в месте, где была вызвана процедура, а затем пошагово выполнять процедуру, пока я не понял, что именно он думает. В моем случае было возвращение, которое препятствовало запуску всего кода в подпрограмме, поэтому оптимизатор выбросил все это. Иногда это глупые вещи, верно? В любом случае, если вы начнете с уровня выше в стеке вызовов и перейдете к процедуре, в которой проблема, причина проблемы может стать более очевидной.

0 голосов
/ 21 декабря 2011

В дополнение к вашему обновлению об оптимизации DLL строки, которые вы указали, где точки останова не работают, скорее всего, будут оптимизированы, так как весь ваш оператор switch не делает ничего другого, чтобы решить, следует ли присваивать значение переменной, котораяникогда не используется и не выходит за рамки оператора switch.Таким образом, компилятор просто не сгенерирует никакого кода для оператора switch, поскольку он вообще ничего не делает или jit просто избавляется от него во время выполнения по той же причине.

...