VS2013 работает старый код; clean + rebuild не достаточно; после удаления папок bin + obj первая перестройка не удалась, а вторая удалась

1

Оригинальное сообщение

Я создаю приложение ASP.NET с Visual Studio 2013 Premium для.NET Framework версии 4.5, используя IIS Express в процессе отладки. Теперь я столкнулся с проблемой, которая произошла с другими проектами раньше (очень редко), но очень часто встречается в этом:

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

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

Выполнение очистки/перестройки не работает вообще, когда я сталкиваюсь с этой проблемой, но обычно удаление папок bin и obj делает трюк. Но теперь происходит следующее:

После запуска процесса отладки (F5) я вижу, что мои точки останова не пострадали, поэтому я останавливаю его, удаляю папки bin/obj и перестраиваю все. Это не работает и всегда терпит неудачу со многими ошибками, говорящими о том, что пространство имен не может быть найдено (хотя IntelliSense предлагает его там, и оно действительно существует), и сборка (которая предоставила пространство имен) отсутствовала (и она действительно находится в конечная папка вывода проекта запуска, но она была создана в своей собственной папке bin проекта...). Затем я перестраиваю все второй раз, и он будет волшебным образом работать. Следующий запуск программы делает все, что я хочу. Но после этого я нахожусь в точке, где уже второй или третий перезапуск снова создает проблему (нет точек останова, старый код), и я могу начать с удаления папок. Я должен добавить, что это поведение началось на прошлой неделе и стало все более частым с тех пор. Это было не всегда в том месте, где мне приходилось удалять папки после каждой второй попытки.

Все это, конечно, невыносимо, поскольку в этих условиях невозможно работать. Но я не понимаю, что делать. Я работал (в том числе) через этот поток MSDN и этот вопрос, но ничего не работает для меня.

Есть ли у вас другие предложения? Может быть, в какой-то момент что-то не так, что явным образом производит такое поведение? Особенно тот факт, что первая перестройка не вторая, а вторая, действительно, вызывает у меня головоломки, и я чувствую, что может быть что-то, что я делаю неправильно.

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

Edit2: Так как резюме, каждый второй раз я пытаюсь запустить программу с точкой останова, которую я хочу нажать, символы не будут загружены, и я должен удалить папки bin/obj. Затем мне приходится дважды перестраиваться, после того, как 2-й раз он работает, запускает и ударяет точки останова. Но в следующий раз после этого он больше не ударит по точкам останова (даже если я ничего не изменю в самом коде!), И я должен начать все сначала.

Обновить

Теперь я попытался запустить VS в качестве администратора и дважды проверить, что ссылки были ссылками на проекты. После простого пакетного очистки всего решения он запустится, а затем покажет мне недостающее исключение сборки для проекта DataAccess в IE. Затем я удалил папки bin/obj и восстановил проект один раз. Теперь я получаю (как обычно) следующие ошибки:

Тип или пространство имен "Бизнес" не существует в пространстве имен "MyNamespace" (вам не хватает ссылки на сборку?)

Не удалось устранить эту ссылку. Не удалось найти сборку "Бизнес, версия = 1.0.0.0, Культура = нейтраль, процессорАрхитектура = MSIL". Убедитесь, что сборка существует на диске. Если эта ссылка требуется для вашего кода, вы можете получить ошибки компиляции.

Дело в том, что сборка Business.dll лежит в MySolution\Business\bin\Debug а также в последней MySolution\Frontend\bin, и это определенно версия, которую я только что построил. Так почему компилятор жалуется? Кажется, что что-то не так с порядком сборки, но это не должно быть, если я использую только ссылки на проекты, не так ли?

Теперь, как обычно, 2-я перестройка отлично работает, и я могу ударить по своим точкам останова после этого. Затем я добавил тривиальную строку int я = 0; в коде сразу после точки останова и перезапустил программу, и снова он говорит мне, что точка останова не будет удалена и что символы не будут загружены. Затем я проверил Debug → Windows → Модули, чтобы увидеть

Не удается найти или открыть файл PDB.

для проектов Business и DataAccess а вчера я получил

PDB не соответствует изображению.

для тех.

Но, щелкнув правой кнопкой мыши Business проект в Модулях и выбрав "Загрузить символы", он немедленно подскажет мне папку obj\Debug project where a файл *.pdb, который был создан при сборке (подтвержденный по метке времени). Выбор этого файла дает

Соответствующий файл символов не найден в этой папке.

Но я просто щелкнул этот файл, так что должно быть что-то не так с частью "соответствия", верно? Есть ли у вас какие-то дальнейшие идеи, поскольку я совершенно не знаком с этим?

Обновление 2

После обновления Visual Studio 2013 до версии 3 я получаю дополнительное предупреждение о компиляторе при выполнении первой команды Rebuild All после удаления папок bin/obj:

Тип "MyNamespace.Business.Providers.BusinessProvider" существует как в "MySolutionPath\StartupProject\bin\Business.dll", так и в "MySolutionPath\Business\bin\Debug\Business.dll".

Интересно, если/почему это проблема, так как сам VS, вероятно, скопировал файл Business.dll в папку bin для StartupProject. Может быть, это может означать, что стоит посмотреть?

  • 0
    Вы используете Visual Studio в качестве администратора в системе? Похоже, проблема с разрешениями.
  • 0
    @CBauer Я попробую это (в настоящее время перезагружаю виртуальную машину, которая может занять много времени), но я думаю, что уже есть. По крайней мере, у меня не было никаких проблем за те 80 дней, которые потребовались для этого приложения, чтобы прийти к этому моменту.
Показать ещё 4 комментария
Теги:
visual-studio
visual-studio-2013
iis-express

3 ответа

0
Лучший ответ

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

0
  1. закройте решение. 2. Удалите папки bin и obj из папки проекта. 3.Откройте решение в визуальной студии Menu> build> Cleansolution, создайте приложение. запустите приложение и проверьте изменения. Если вы все еще видите ту же проблему, выполните еще одно небольшое изменение в пользовательском интерфейсе и перестройте приложение. Он работает нормально.
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню