Visual Studio не допускает точек останова в представлениях MVC

Иногда Visual Studio не позволяет мне устанавливать точки останова в представлениях MVC. Это случалось со мной много раз, но не для каждого просмотра, и я не знаю почему.

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

Если ошибка верна, то я хочу запустить исходный исходный код. Я не знаю, что происходит за кулисами VS; Я пытаюсь восстановить и все такое, но это не помогает. Я работаю в режиме отладки в VS 2012.

снимок экрана попытки разместить точку останова в представлении бритвы VS 2012 MVC


person levininja    schedule 28.08.2013    source источник
comment
вы работаете в выпуске, и он не настроен для создания файлов pdb? Вы абсолютно можете, здесь действует что-то еще, что блокирует это. Однако есть много переменных, которые могут вызвать это.   -  person Darren Kopp    schedule 28.08.2013
comment
Я работаю в режиме отладки. Есть ли еще какая-либо соответствующая информация, которую я должен включить в свой вопрос?   -  person levininja    schedule 28.08.2013
comment
вы не можете ничего больше добавить. как я уже сказал, может быть задействовано так много переменных. он может копировать dll из другого каталога вывода проекта, может быть, он не генерирует pdb, может быть, что он указывает на другие файлы, чем те, которые вы ожидаете, и т. д.   -  person Darren Kopp    schedule 28.08.2013


Ответы (7)


Это может быть вызвано многими причинами, но есть несколько вещей, которые я недавно помогал людям, чтобы проверить их:

  • Первый шаг: для включения отладки рядом с DLL должен быть файл PDB. (см .: Что такое файл PDB?) Убедитесь, что у вас есть PDB в исполняющий каталог.

  • Очистите, чтобы удалить все старые библиотеки DLL из папок bin.

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

  • Если вы запускаете что-то связанное с Интернетом, убедитесь, что браузер не кэширует код или IIS не поддерживает длительный процесс.

  • Убейте все запущенные экземпляры Visual Studio Development Server (вы можете сделать это из диспетчера задач или, проще говоря, из панели задач - они выглядят как логотип IE, и когда вы наводите на них курсор, они сообщают вам, на каком порту они работают).

  • Перезапустите IIS, используя iisreset из командной строки.

  • Проверьте настройки для отладки в Visual Studio (Tools > Options > Debugging > Symbols). Вы хотите автоматически загружать символы, и если вы связываете другие сборки, вам необходимо указать здесь их файлы PDB.

person Kirk Broadhurst    schedule 28.08.2013
comment
См. Мой комментарий ниже re: web.config, чтобы изменить список вещей, которые нужно проверить. - person Aaron Hudon; 21.11.2017

Итак, у меня была эта проблема сегодня утром, и исправление для меня было связано с синтаксисом бритвы.

Я устанавливал переменную внутри оператора if

@If (my condition)
{
  myVar1 = "blah blah blah"
  @myVar2 = 1 <== This line here was causing my razor to crap out on render
}

Так что все остальное - это хорошо, однако неправильный синтаксис бритвы также может вызвать проблему с точкой останова. В данном случае это был символ @ на myVar2 внутри блока кода ... Просто к вашему сведению

person Bryan Halterman    schedule 15.09.2017
comment
Хотя этот вопрос был для VS2012, в настоящее время я нахожусь на VS2015 - person Bryan Halterman; 15.09.2017

Самое простое решение, которое я нашел для решения этой проблемы:

Установите точку останова в коде контроллера прямо перед вызовом View. Затем, когда эта точка останова будет достигнута, выполните несколько шагов (с помощью F10). Он пройдет через _ViewStart.cshtml и, возможно, еще кое-что. Но скоро дело дойдет до просмотра.

Как только вы окажетесь в представлении, нажатие F5 (продолжить) приведет вас к точке останова в представлении.

person levininja    schedule 27.04.2015

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

Убедитесь, что "debug" установлен и Voila ... отладка снова работает :-)

person Casper Kvolsbæk    schedule 17.04.2018

Из-за ответа у меня ничего не получилось, чтобы установить точку останова в коде javascript. Я переместил код javascript внутрь файла Scripts \ myscript.js и заменил блок сценария на

<script src="@Url.Content("~/Scripts/myscript.js")"></script>
person Pete    schedule 23.08.2016

Чтобы добавить в ответ @ kirk-broadhurst (пожалуйста, измените, если возможно), дважды проверьте свой web.config, в частности флаг compilation в system.web. Даже если вы строите для отладки, если для атрибута debug установлено значение false, вы столкнетесь с проблемами при отладке Razor.

<system.web>
    <compilation debug="true" targetFramework="4.6" />
</system.web>
person Aaron Hudon    schedule 20.11.2017

Убедитесь, что для конфигурации вашего решения установлено значение «Отладка не в выпуске».

Спасибо

person Joe    schedule 15.04.2016