2010-04-14 3 views
10

Я переношу сложное смешанное решение C++/.NET с VS2008 на VS2010.VS2010 всегда пересматривает проект

Усовершенствованное решение работает в VS2010, но система сборки всегда ссылается на одну сборку C++/CLI. Он не перекомпилирует ничего, но компоновщик касается файла. Причиняет эффект пульсации вниз по течению в сборке как целой группы зависимых, а затем восстанавливается.

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

+0

См. Также: http://stackoverflow.com/questions/2762930/vs2010-always-thinks-project-is-out-of-date-but-nothing-has-changed для того же вопроса, вызванного отсутствующими файлами, а чем файл PDB. – Ben

ответ

7

Оказывается, проблема была в том, что имя файла PDB было определено под как настроек компилятора, так и настроек компоновщика (с тем же именем).

Это похоже на проблему в VS2010, так как некоторая «старая» pdb из промежуточной директории (выход компилятора?) Копируется над той, что находится в выходном каталоге (вывод компоновщика?). Это привело к тому, что pdb в выходном каталоге был старше, чем некоторые из файлов obj, и в следующий раз принудительно перевязал (полоскание и повтор).

Устранение параметров имени pdb, похоже, устранило проблему, и значения по умолчанию были в порядке.

+12

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

0

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

У нас была аналогичная проблема с крупным смешанным проектом FORTRAN/C++, связанным с изменением или изменением. Кажется, он начался, когда решение было обновлено с VS2008 до 2010 года, хотя никто не мог вспомнить.

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

Удалите любые кавычки в «дополнительных библиотечных каталогах» проекта верхнего уровня FORTRAN (то есть того, который делает исполняемый файл).

Теперь, я не поверил бы это сам, без доказательств, так что если у вас есть желание, чтобы воспроизвести эту ошибку самостоятельно:

  1. Открыть новую VS2010 сессию.
  2. Создайте новый проект FORTRAN, который выполняет исполняемый файл.
  3. Оставьте его пустым, но свяжите его с не-встроенным файлом lib (т. Е. С вашим собственным) и добавьте каталог вашей библиотеки в дополнительные библиотечные каталоги.
  4. Проверьте это правильно и правильно.
  5. Теперь попробуйте добавить двойные кавычки (") по каталогу и несколько раз нажмите« Построить ». Если ваш сеанс похож на мой, он будет пересматриваться каждый раз. Когда вы удаляете котировки, он останавливается.

Это только кажется, проблема в проекте верхнего уровня, и когда эти проекты FORTRAN - котировки не имеют никакого влияния на C++ проекты или те, которые создают LIBS

перекомпоновка не возникает, если VS делает. не нужно искать libs (например, если все ваши библиотеки встроены, например kernel32.lib), но будет происходить независимо от того, находится ли ваша lib в каталоге с кавычками или другим.

Если кто-то может оправдать эту «особенность», пожалуйста, дайте мне знать!

Смежные вопросы