Очень странная проблема сборки

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

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

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

Обновление:

  • Упомянутая DLL является внешней (ValidationFramework от CodePlex), расположенной в дереве исходного кода.
  • Ни один из моих проектов не копирует DLL, только некоторые ссылаются на нее.
  • Это происходит как в сборках отладки, так и в сборках выпуска.

Просто счел уместным также добавить, что проект A ссылается на ValidationFramework.dll, как и проект B, но проект B ссылается на проект A. Теперь, когда возникает ошибка сборки, всегда, когда компилятор переходит к проекту B, то есть проект A всегда строит успешно при первой и второй попытках сборки.

Кроме того, когда проект B терпит неудачу, я могу снова и снова нажимать «Построить», но это не повлечет за собой никаких действий, для этого действительно требуется «Перестроить», поэтому все, что «исправляет» возникшую проблему, происходит до создания проекта B (поскольку сама проблема может также).


person mindless.panda    schedule 26.03.2010    source источник
comment
Все ли ваши .dll включены как проекты или вы ссылаетесь на dll в файловой системе? Есть ли у вас проекты, которые копируют .dll в события сборки?   -  person vfilby    schedule 26.03.2010
comment
@vfilby - См. обновление до вопроса.   -  person mindless.panda    schedule 26.03.2010


Ответы (2)


Является ли недостающая DLL одним из проектов, создаваемых в вашем рабочем пространстве? Установлены ли у вас зависимости проекта так, чтобы проект DLL был создан до того, как будет построен используемый проект?

person jwismar    schedule 26.03.2010
comment
Сможете ли вы успешно создать любой из отдельных проектов, ссылающихся на эту DLL? Вы смотрели, есть ли порядок (сначала проект сборки A, затем проект B и т. Д.), Который позволяет вашей сборке добиться успеха с первой попытки? - person jwismar; 26.03.2010
comment
Сборка одинакова для обеих попыток, однако я только что обновил вопрос, чтобы отразить ваш вопрос о порядке и о том, как это влияет на процесс сборки. - person mindless.panda; 27.03.2010

Это звучит смутно знакомо. Возможно, я испытал это с vs.net 2003 или 2005, я не помню. Но он проявил себя так:

В отладочных сборках указанный C ++ / CLI будет правильно скопирован в папки потребляющих сборок, но когда я выпускал сборки, они внезапно ломались, потому что ссылающиеся проекты не могли их найти. Оказалось, что это ошибка VS.NET, которая, как я думал, была исправлена ​​в сервисе, но тем временем я добавил несколько шагов пост-сборки, чтобы переместить сборку грубой силой туда, где она должна быть.

Кажется, что ваши отладочные сборки работают каждый раз?

person dkackman    schedule 26.03.2010
comment
Обновленный вопрос, но проблема возникает независимо от отладки или выпуска. - person mindless.panda; 26.03.2010