VS2010 LNK1181 при перестройке проекта с зависимостью

У меня есть решение с двумя проектами С++ (CLR). Один проект ссылается на другой, поэтому проектные зависимости и порядок сборки правильно отражают это. Оба проекта предназначены для одной и той же выходной папки. Зависимый проект имеет зависимость, настроенную с помощью Copy Local: false.

Если я "перестрою" зависимость самостоятельно, она строит отлично, а ее целевые объекты находятся в выходном каталоге.

Когда я "перестрою" решение (или зависимый проект), я получаю:

error LNK1181: cannot open input file '<outdir>\Dependency.lib'

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

Кроме того, когда я "очищаю" решение, сразу же "создаю" решение, я не получаю никаких ошибок.

Разве не "перестроить", по-видимому, "Clean + Build"?

Ответы

Ответ 1

Перестройка в Visual Studio очищает и строит проекты один за другим, так что, вероятно, это происходит

  • Проект A очищается.
  • Скомпилирован проект A.
  • Проект B очищается, удаляя части выхода из Project A из-за того же выходного каталога.
  • Проект B не работает из-за отсутствующих зависимостей.

Подробнее обсуждение здесь.

Ответ 2

Второй проект удаляет что-либо из своего выходного каталога при выполнении перестройки. Очистка не различает файлы, которые являются выходными данными проекта bonafide, и другими файлами. Clean All, за которым следует Build All, не вызывает его, потому что нет очистки выходной папки между созданием проектов. Короче говоря, Visual Studio не поддерживает несколько проектов, выводимых в одну и ту же папку. Выведите их в свои местоположения по умолчанию, а затем позвольте зависимостям от копирования Visual Studio, как это было предназначено/предназначено для выполнения.