it-roy-ru.com

"Точка останова в настоящее время не будет достигнута. Исходный код отличается от оригинальной версии". Что это значит?

При отладке в Visual Studio иногда я добавляю точку останова, но она пустая, и VS говорит: «В данный момент точка останова не будет достигнута. Исходный код отличается от исходной версии». Очевидно, это мешает мне отладить.

Что на земле означает сообщение? Какая оригинальная версия? Если я только что открыл решение и не внес никаких изменений в код, как может существовать «оригинальная версия»?

459
David

Как говорится, «исходный код отличается от оригинальной версии».

Щелкните правой кнопкой мыши папку проекта в обозревателе решений и выберите Clean. Создайте новую версию проекта, и точка останова снова заработает!

240
André Alves

Если вы не отметили проект DLL в конфигурации сборки Debug , ваш новый код никогда не будет собран!

Перейдите к Build --> Configuration Manager ... (в VS2010) и проверьте, проверен ли проект с кодом, который вы пытаетесь отлаживать, на текущую конфигурацию сборки.

118
Oliver

Для меня это было во время работы над проектом WebSite. После очистки этих временных папок я получил правильные ошибки компилятора:

  • C:\Documents and Settings\%username%\AppData\Local\Temp\Temporary ASP.NET Files
  • C:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

Я наконец-то решил проблему, когда обнаружил, что файл класса, который я намеренно переместил в подпапку, каким-то образом появился в корневой папке. VS использовал это, пока я редактировал другое.

40
AnthonyVO

Ты когда-нибудь делал это?

Хотите продолжить и запустить последнюю успешную сборку?

Если вы отметили флажок и нажали «Да», вы запустите последнюю успешную сборку, даже если ваш проект не компилируется. Это означает, что всякий раз, когда вы устанавливаете точку останова, вы получите эту ошибку.

Попробуйте изменить это значение:

  • Инструменты
    • Опции
      • Проекты и решения
        • Построй и беги
          • При запуске, когда возникают ошибки сборки или развертывания: Не запускать
35
Codesleuth

Идти к

  • Инструменты
    • Опции
      • Отладка
        • Генеральный

Снимите флажок Требовать, чтобы исходные файлы точно соответствовали исходной версии

27
Rachmad

Выберите Отладка inКонфигурации решениявместо Release

screenshot of menu

26
AdiKonstantin

Закрытие Visual Studio и повторное открытие решения может решить проблему, т. Е. Это ошибка внутри самого IDE (у меня работает VS2010).

Если у вас запущено несколько экземпляров Visual Studio, вам нужно только закрыть экземпляр, на котором запущено решение с проблемой.

24
Luke Whyte

Обратите внимание на окно «Вывод» в VS. Он скажет вам, какие сборки загружены и когда. Вы можете видеть, что загружается более старая версия вашей сборки где-то в папке. 

Например, если у вас есть несколько сборок, и вы в настоящее время пытаетесь разбить одну из вспомогательных сборок, CLR будет обрабатывать разрешение сборки, которое может загрузить другой файл сборки, чем тот, на который вы ссылались в проекте.

23
Tormod

Новый способ решения этой проблемы появился в Visual Studio 2017 с 15.3.1 по 15.3.5. Если вы используете EditorConfig , опция charset=utf8 вызывает эти симптомы. Команда VS воспроизвела это и говорит, что работает над этим .

Поэтому одно из исправлений - закомментировать вашу строку charset=utf8 в файле .editorconfig.

Правка: это должно быть исправлено с VS 15.5.

19
John Hatton

Это часто случается также в том случае, если вы используете в файле ссылки на двоичные файлы (вместо ссылок проекта на код в вашем проекте), а скомпилированный двоичный файл, на который вы ссылаетесь, не синхронизируется с соответствующим исходным кодом на вашем компьютере. Это может произойти из-за того, что вы загрузили новую версию бинарного кода из системы управления исходным кодом без нового исходного кода, который был в комплекте с ним, или у вас есть несколько версий бинарного файла на вашей машине, и вы ссылаетесь на старую копию и т.д. Если это действительно так проблема, это хорошая причина, чтобы использовать ссылки на проекты настолько, насколько это практически возможно.

8
Mike Mooney

Существует почти незаметная настройка, которая исправила эту проблему для меня. Если есть конкретный исходный файл, в который не попадает точка останова, он может быть указан в 

  • Обозреватель решений
    • щелкните правой кнопкой мыши Решение
      • Свойства
        • Общие свойства
          • Отладка исходных файлов
            • Msgstr "Не ищите эти исходные файлы".

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

7
JBSnorro

Для меня ни один из пунктов не решил проблему. Я просто добавил новую строку кода внутри этой функции, что-то вроде:

int a=0;

добавив, что, я думаю, я вызвал Visual Studio, чтобы добавить эту функцию в исходную версию

5
Mehrdad Babaki

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

4
Tomi

Вы можете получить это сообщение, когда используете активатор, а сборка, в которую вы устанавливаете точку останова, еще не загружена.

Точка останова будет устранена, как только активатор загрузит сборку (при условии, что символы сборки и отладки обновлены). Хорошее место для просмотра - окно модулей в меню отладки. Там вы должны искать сборку, к которой принадлежит и ваш файл. Сначала проверьте, что сборка загружена. Тогда откуда он загружается? Затем загружается файл символов. Опять же, откуда загружается файл символов? Наконец, проверьте версии обоих.

4
David Burg

Я тоже с этим столкнулся. Условия, которые вызвали мою проблему: 

  • Я запускаю полный экземпляр IIS7 локально
  • Я делаю версию своего программного обеспечения в отдельных проектах

Я вызвал это, открыв предыдущую версию (VS попросил спросить, хочу ли я указать на этот экземпляр в отладке IIS, я ответил «Да»), а затем открыл текущую версию (снова отвечая на IIS Запрос «Да»), затем попытка отладки в предыдущей версии.

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

4
baker.nole

Проблема в том, что ваша информация отладки не синхронизирована с вашей сборкой. Решение простое:

  1. Перейдите в папку «bin»
  2. Удалите файлы .pdb
  3. Перестраивать

Должен сделать свое дело!

(Странно то, что перестройка без выбрасывания файлов .pdb не всегда работает. Я вижу, как обновляется дата изменения, но все еще где-то в цепочке (отладчик VS2013, IIS, кэш сборок) это изменение не обнаружено )

3
FrankyHollywood

Для меня решение было скрыто в Advanced Build Settings свойств проекта:  enter image description here

По неизвестной причине он был установлен на none: установка его на full привела к попаданию в точки останова.

Чтобы попасть в это диалоговое окно, откройте свойства проекта, затем перейдите к Build, а затем нажмите кнопку Advanced... внизу страницы.

3
riqitang

Это также происходит при отладке проекта C++, который загружает модуль, который был реализован с использованием некоторого языка CRL (Managed C++, C # и т.д.). В этой ситуации сообщение об ошибке действительно вводит в заблуждение.

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

3
MaR

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

3
MikeTheLiar

В моем случае я подключался к работающему процессу в VS 2012. При подключении вам предоставляется возможность отладки в различных режимах (нативный, скрипт, silverlight, управляемый 2.0, управляемый 4.0 и т.д.). По умолчанию отладчик выбирает режим автоматически. Однако Automatic не всегда делает правильный выбор. Если ваш процесс содержит несколько типов кода, убедитесь, что отладчик использует правильный.

2
silent tone

Для меня сработало изменение платформы решения с x86 на любой процессор. Изменив значение Any, я установил конечный адрес, запустил веб-сайт, открыл страницу, нажал кнопку, и он остановился. Я закрыл сайт, перешел обратно на x86 и успешно выполнил ту же последовательность действий.

2
John

Сначала я попробовал из командной строки;

удаление временных файлов из командной строки сработало.

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Временные файлы ASP.NET> корень rd/s

Когда я отключаю опцию «Включить только мой код» в Сервис -> Параметры -> Отладка -> Общие

Проблема решена для меня. Это приложение WCF, пыталось отладить страницу Ashx . http://blogs.msdn.com/b/zainnab/archive/2010/10/25/understanding-just-my-code.aspx

2
Teoman shipahi

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

Для одного другого слоя это создавало такую ​​же проблему, даже если в настройках включена сборка. Я сделал все остальные варианты, такие как возобновление очистки проекта, но ни один из них не помог. Наконец, я снял флажок сборки для этого конкретного проекта и очистил и пересобрать. Снова отметили флажок и сделали То же самое. тогда проблема была исправлена.

Надеюсь это поможет..

2
Priyankara

идти к:

Сервис> Параметры> Отладка> Общие> не проверено "Требуются исходные файлы , Чтобы точно соответствовать исходной версии"

2
Long Field

Я испытал это в 32-битной сборке на vs2017. 

Точно ни одно из решений не сработало для меня. Я перезапустил, очистил IDE файлы, очистил построенное решение, вытащил из git repo и перестроил решение безрезультатно. 

Я вытягивал 64-битную зависимость из nuget, и как только я использовал сборку, исходные коды больше не были встроены в конечный исполняемый файл, а вместо этого строились кэшированные источники IDE. 

Я удалил конфигурацию nuget, удалил сборку, на которую ссылались, загрузил исходный код, собрал log4net вручную, подписал его, добавил его в папку в моем проекте, добавил ссылку на него, и я снова смог отладить.

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

Правка: во время сборки не было ошибок, несмотря на то, что в настройках IDE была включена опция «Запросить ошибку сборки».

2
nurettin

Если в вашем решении более одного проекта , убедитесь, что в качестве StartUp Project выбран правильный проект. Чтобы установить конкретный проект в качестве проекта запуска вашего решения, щелкните проект правой кнопкой мыши и выберите Set As StartUp Project.

После того, как я правильно установил мой StartUp Project, поток достиг желаемой точки останова.

2
displayName

В Windows 7, Visual Studio Express 2010, если вы активировали параметр Использовать режим совместимости для Windows XP SP3, эта ошибка может возникнуть. 

Я снял галочку с опции, и она снова отлично заработала. Щелкните правой кнопкой мыши ярлык VS или исполняемый файл, выберите свойства , а затем совместимость .

2
Pete

В моем случае я разрабатывал приложение для Windows CE, которое тестировалось на эмуляторе. Проблема заключалась в том, что исполняемый файл не был развернут в эмуляторе, поэтому .pdb (в среде разработки) не синхронизировался с .exe (в эмуляторе), поскольку новый .exe никогда не копировался в эмулятор. Мне пришлось удалить .exe в эмуляторе, чтобы вызвать новое развертывание. Тогда это сработало.

2
Julen

Это случилось в Visual Studio 2017 после того, как я добавил существующие файлы в проект. Это сработало для меня:

  1. перейти к SolutionFolder\.vs\SolutionName\v15\sqlite3 и удалить storage.ide 
  2. откройте решение снова
  3. open the solution again
1
laurian

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

1
silent tone

Проверьте, есть ли в решении несколько файлов с таким именем.

У меня было это в проекте, который я перенял у кого-то другого. Список точек останова был полон номеров строк в Controller.cs, некоторые активные, а некоторые нет. Я нашел этот вопрос и попробовал несколько вариантов, но когда я дважды щелкнул по контрольным точкам, они перенесли меня в разные проекты в рамках решения. Поскольку файлы назывались одинаково, они кажутся одинаковыми, но это не так. Ответ, конечно, тогда игнорировать предупреждения, так как они станут активными, если вы загрузите этот другой файл.

1
mj2008

Может быть, DLL загружаются из GAC.

Вы можете удалить dll из gac, требуются права администратора.

gacutil -u YourDll

1
Xtremexploit

Убедитесь, что вы не находитесь в режиме выпуска, когда вы пытаетесь отладить.

1
ComeIn

В моем случае проблема заключалась в том, что отладка ASP.NET не была включена в свойствах проекта >> Веб

0
voddy

В моем случае я забыл включить «stdafx.h» в заголовочный файл, где я декларировал функцию шаблона.

0
mrcointreau

Я раньше возился с моим файлом csproj. Поэтому в свойствах проекта (VS 2013)> вкладка «Веб»> раздел «Серверы»> [выпадающий список] я выбрал «IIS Express», когда ранее был выбран «Локальный IIS». Как только я исправил настройки до того, что у меня было раньше, точки останова сработали.

0
NightShovel

Это случилось со мной, потому что у меня были другие проекты в решении, которые не создавались . После того, как я выгрузил эти проблемные проекты (щелкните правой кнопкой мыши проект в обозревателе решений -> Выгрузить проект), перестроил решение и снова запустил - точка останова была достигнута!

0
Sarah

Для меня; мой веб-сайт работал в приложении IIS в Default Website ( http: // localhost/myapp/ ), а отображение приложения IIS указывало на путь к диску. это отличалось от исходного кода, над которым я работал. 

Разрешить; переназначить приложение IIS по тому же пути, что и исходный код, который вы создаете.

(Это может произойти, если на вашем диске запущено несколько версий одного и того же приложения)

0
Mark Cooper

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

0
Alex Smirnov
0
Guru Stron

Для пользователей VS Code:

Если вы нажмете это при попытке отладки приложения ASP .NET Core, убедитесь, что задание сборки, определенное в tasks.json, и чей вывод вы видите на панели Debug Console, выполнено успешно.

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

0
Tomáš Hübelbauer