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

514

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

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

David
источник
36
перекомпилируйте /
соберите
Вы открываете проект, написанный в другой версии Visual Studio?
Махеш Велага
2
Это проект сайта. Там не должно быть необходимости явно строить его. Должен компилироваться при использовании. Я подозреваю, что VS не может создать сайт, но это не говорит мне об этом! Махеш - нет, все таки версия VS.
Дэвид
В моем случае .. У меня разные версии одного и того же кода (например, test.cs для Live-версии и devolopment-версии .. Когда я открыл devolopment-версию и установил точку останова на test.cs, я получил ту же ошибку, но я понял, что ставлю тест точки останова Класс .cs, связанный с живой версией sln, а не devolopment, поэтому проверьте, что cs уже находится в стадии разработки)
dankyy1
5
Удаление каталогов bin и obj, чем восстановление работало для меня.
Aycan Yaşıt

Ответы:

277

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

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

Veedrac
источник
120
Использование чистой не всегда работает. Мне пришлось вручную удалить все в моей папке bin, чтобы заставить его работать снова.
Карра
3
У меня по ошибке была ссылка на DLL в папке bin. Исправлено исправление эталонного пути.
Брэд Урани
39
Для меня даже удаление папок bin и obj не сработало. Мне также пришлось перезапустить Visual Studio.
d512
1
Потратил почти весь день, чтобы найти решение. Спасибо большое за предоставление решения.
Racs
8
Я закрыл VS, удалил все папки bin и obj, пересобрал все, дважды проверил конфигурации сборки, сборка прошла успешно. Нет кости. Простые вещи не должны быть такими сложными. >: |
snarf
129

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

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

Oliver
источник
Спасибо за предложение, Оливер. Это определенно не происходит здесь, я заметил бы довольно быстро, если бы один из моих проектов не строился.
Дэвид
3
У меня была точно такая же проблема, только не было ничего непроверенного. это была просто сборка для x86 в этом диалоге, в то время как моя локальная машина - x64! Поэтому я выбрал Any CPUопцию, и она снова работает.
JP Hellemons
3
Удаление проектов из конфигурации отладки без уважительной причины должно быть кардинальным грехом, так как эта конфигурация вполне может использоваться машиной сборки CI (я знаю, что она здесь), так что в конечном итоге она может пройти, когда она потерпит неудачу. Я знаю, что это может быть одним из многих этапов сборки, но все же ... @ Оливер Я надеюсь, что член команды купил тебе печенье! :)
Fetchez la vache
У меня была эта проблема, когда я перешел на сборку для x86 вместо AnyCPU. Он удалил проекты из строя по неизвестной причине.
Адам Педли
Боюсь, проект указан для сборки в диспетчере конфигурации, так что мне это не помогло :(
Ortund
43

Для меня это было во время работы над проектом 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 использовал это, пока я редактировал другое.

AnthonyVO
источник
2
Очистка временных файлов в каталоге Windows работала на меня, ура!
ChrisFletcher
7
Я просто хотел добавить аналогичный ответ - убедитесь, что ни одна старая копия dll вашего проекта не лежит ни в одной из временных папок, которые использует ASP.NET, например C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Временные файлы ASP.NET - как уже упоминалось - но также C: \ Windows \ Microsoft.NET \ Framework_64_ \ v4.0.30319 \ Временные файлы ASP.NET . Я использую все для быстрого поиска этих копий .
Оливер
12
Просто подсказка: ввод %localappdata%в поле поиска приведет вас прямо кC:\Documents and Settings\%username%\AppData\Local
dav_i
1
Могу подтвердить, что это работало для меня в Visual Studio 2013 над проектом веб-сервиса.
Моери
Сделал все это, но, похоже, это не помогло. Я был действительно взволнован, увидев это тоже.
Ортунд
40

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

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

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

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

  • инструменты
    • Опции
      • Проекты и Решения
        • Построить и запустить
          • При запуске, когда возникают ошибки сборки или развертывания: Не запускать
Codesleuth
источник
Я не думаю, что я сделал это. И все же спасибо за ссылку. Это дало мне понимание того, что означает эта подсказка!
Дэвид
11
Visual Studio имела эту возможность в течение десятилетий (по крайней мере, VS98 имел ее). Я никогда не понимал, почему кто-то захочет запустить последнюю успешную сборку. В конце концов, если бы это было то, что я хотел, я бы запустил его напрямую, так как я все равно не мог отлаживать. Не запускать был бы более разумный дефолт.
OregonGhost
6
Я использовал его несколько раз для запуска проекта (по любой причине, например, просто чтобы показать кому-то еще), пока я все еще в процессе написания кода, который не будет компилироваться. Иногда это удобно. Лично я оставляю это отключенным.
Codesleuth
3
Возможно, если бы они должны были показать своего начальника, когда он внезапно пришел. Они могут нажать F5 и быть похожим на «вы видите, это работает!»
Гигала
33

Перейти к

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

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

Rachmad
источник
17
@Rachmad Это решение работает. Но это, кажется, не полное решение, потому что это означает, что наши исходные файлы не совсем соответствуют исходной версии
onmyway133
Это именно то, что я искал от @entropy, это правильно. Хотя это позволяет устанавливать точки останова, факт в том, что используемый источник не соответствует используемому pdb. Лучшее решение - это исправить. Во времена, когда это невозможно сделать, это прекрасно работает.
JamesG
Даже если этот флажок снят, выполнение не достигает точки останова, и ошибка сохраняется
Ortund
12
Это не решение этой проблемы, а обходной путь. Очевидно, я не хочу работать с устаревшими файлами в отладчике.
Оби Ван
2
@ObiWan Не очевидно. Мне нравится вносить незначительные правки и продолжать отладку, даже зная, что исходный код и сборка различны.
Алан Бальеу
30

Выберите « Отладка» в конфигурациях решения вместо выпуска

скриншот меню

AdiKonstantin
источник
1
Это была моя проблема. Я скомпилировал в режиме отладки, изменил код, а затем запустил его в режиме выпуска. Неудивительно, что отладчик думал, что код был другим - символы отладки были другими. Когда я удалил папку bin, как предлагали другие, я получил ошибку «для этого документа не было загружено никаких символов». Только тогда я установил связь и пробился к этому ответу. Нужно больше голосов!
indot_brad
Возможно, что проект будет отключен для сборки даже в конфигурации сборки Debug. Требуется проверка конфигурации сборки, переключение между конфигурацией Debug / Release бессмысленно.
Асад Саидуддин
Это было и для меня. попытался очистить, перестроив другие упомянутые решения безрезультатно. Не заметил, что решение смотрело мне в лицо
Адам Эй,
Это то, что случилось со мной - я строил свой проект и заменял мои библиотеки снова и снова, но проблема просто не исчезла. Я понял, что код создается в режиме Release, когда я заменял dll из папки / bin / debug. Глупый я.
displayName
Я хотел присоединиться к процессу, который был построен в режиме выпуска. Переход на отладку решил мою проблему.
5
27

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

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

Tormod
источник
1
Также стоит иметь в виду, но я не думаю, что это проблема здесь, так как я пытаюсь взломать проект веб-сайта, а не библиотеку классов.
Дэвид
24

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

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

Luke Whyte
источник
4
Закрытие Visual Studio сработало и для меня. Также с действиями Clean / Rebuild.
danielB
3
Это исправило решение в VS 2015
TaintedLemon
3
Исправлена ​​проблема в VS 2017
Даниэль Фишер lennybacon
Исправлена ​​проблема в VS 2012
Бисквит
19

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

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

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

Джон Хаттон
источник
Статус теперь «Фиксированный - ожидающий релиз» по состоянию на два дня назад (9 октября 2017 г.). Что является хорошей новостью, так как UTF-8 - единственное разумное значение по умолчанию для кодирования текста в наши дни. :-)
rmunn
Я также замечаю, что основной причиной этой проблемы, по-видимому, было это другое исправление , charset=utf8которое интерпретировалось как «UTF-8 с BOM». Изменение этой интерпретации на «без спецификации» привело к повреждению некоторых файлов UTF-8, в которых была спецификация. Поэтому, если вы столкнулись с этой проблемой, и исправление Visual Studio еще не выпущено, попробуйте удалить спецификацию из начала текстовых файлов, и это может решить проблему. (Этот комментарий просит ссылки на Zero Wing ... :-))
rmunn
Это было проблемой и для меня. В настоящее время это не исправлено или, по крайней мере, еще не выпущено, или ошибка была вновь введена (версия 15.4.2)
avidenic
12

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

Stijn
источник
Я понимаю, что вы имеете в виду, и об этом стоит помнить в будущем, но рассматриваемый источник здесь - проект веб-сайта, а не библиотека классов.
Дэвид
Это распространенная проблема при подборе устаревшего кода, из-за которой я ломаю голову над вопросом, какой гений решил ссылаться на dll из проекта в решении, которое когда-либо использовалось только другим проектом в решении. вздох
Келл
10

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

int a=0;

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

Мехрдад Бабаки
источник
7

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

Томи
источник
Я не могу +1 этого достаточно. Я недавно переустановил Windows и не заметил, что мои системные часы были выключены. Конечно, это изменение все испортило, и перестройка всего решения / проекта волшебным образом исправила это.
Кайл Баран
7

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

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

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

JBSnorro
источник
Я столкнулся с точно такой же проблемой. Ваш ответ помог мне! Спасибо! +1
jweyrich
5

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

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

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

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

FrankyHollywood
источник
Build-> Clean Solution также должен выполнить удаление файлов, которые необходимо удалить.
Дейв
После огромной потери времени, потерянного из-за этой проблемы, это решение пошло на пользу. Thx FrankyHollywood
AD
4

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

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

Stijn
источник
4

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

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

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

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

baker.nole
источник
3

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

mikeTheLiar
источник
3

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

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

Stijn
источник
3

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

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

показать имя
источник
Стоит также отметить, что если ваша точка останова находится в проекте, который НЕ является вашим стартовым проектом, и она НЕ МОЖЕТ стать вашим стартовым проектом (поскольку, например, вам нужен другой проект, который будет стартапом), вы можете (после запуска основного) щелкните правой кнопкой мыши и выберите « Отладка» >> «Начать новый экземпляр проекта», в котором есть точка останова, в которую вы хотите попасть
Caius Jard
3

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

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

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

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

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

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

нуреттин
источник
3

Для меня решение было скрыто в Advanced Build Settingsсвойствах проекта: введите описание изображения здесь

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

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

riqitang
источник
3

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

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

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

Priyankara
источник
2

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

тихий тон
источник
В моем случае я подключался к w3wp.exe для отладки кода .NET, но по какой-то причине он подключал отладчик Script, который не смог увидеть мои контрольные точки C #. Изменение его на отладчик .NET позволило моим контрольным точкам C # работать.
Оран Деннисон
2

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

Julen
источник
2

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

John
источник
2
Возможно, выбор процессора вообще не влияет на проблему, и это просто тот факт, что он вызывает перестройку?
JWG
Он будет использовать другую папку bin, возможно, в вашей карте процессора есть старая dll.
Карра
У меня была эта проблема, в то время как активная платформа x86 (которую я никогда не использовал), переключение обратно на Win32 решило проблему. ПК является общим, так что кто-то другой установил эту платформу по любой причине.
Зак
2

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

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

Пит
источник
1
Здесь может происходить то, что конфигурация вашего выпуска изменяется с x32 на x64, когда вы отключаете режим совместимости, и у вас могут быть не все проекты, выбранные для сборки в x32. Почему некоторые проекты отключены для сборки в x32 - это то, о чем вам нужно поговорить с членами вашей команды.
Асад Саидуддин
Это была именно моя проблема. Спасибо!
Йохан Холтби
2

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

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

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

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

Сара
источник
2

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

  1. закрыть решение,
  2. пойти SolutionFolder\.vs\SolutionName\v15\sqlite3и удалитьstorage.ide
  3. откройте решение снова
Laurian
источник
Спасибо за это решение! Никто до этого не работал, и это спасло мой день :)
StefanaB
2

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

Заходи
источник