Я использую инструмент Lexware Assembly Reference ... дает вам пункт меню в меню Tools в VS, и позволяет вам видеть, являются ли ссылки сборкой или ссылками на проект, путями подсказок к dll, copy-local, specific-versionи другие справочные свойства.Он также позволяет редактировать эти свойства в одном окне.
http://assemblyreftool.codeplex.com/ для Visual Studio 2010
http://www.codeproject.com/KB/macros/Lexware_AssemblyReference.aspx для Visual Studio 2005/2008
Также обратите внимание: если у проекта есть ссылка на проект, и у вас есть этот проект в решении, но указанный проект не включен, ссылочный проект не будет построен, и вы будете использовать локально скопированную dll в папке binссылочный проект (т.е. независимо от того, какой была последняя успешная сборка ссылочного проекта).Если нет локальной копии dll ссылочного проекта, сборка завершится неудачей.
Если в иерархии порядка сборки сначала компилируется проект, но имеет более старую сборку ссылочной dll, то эточто вы застряли для более высоких сборок.Причина в том, что упомянутая dll скопирована в папку bin.Поэтому, когда второй проект компилируется, он ищет ссылку на самую низкую dll в проекте скомпилированного корня и находит, что в папке bin уже есть копия (хотя и более старая версия).
Решение:(1) Включите сам ссылочный проект в ваше решение(2) Измените ссылки проекта на ссылки dll и ссылайтесь на локальную контролируемую версию, которую вы компилируете независимо.(3) Вручную изменить порядок сборки проектов (не рекомендуется)
Надеемся, что эта диаграмма прояснит это:
Solution
|
--Project 1 (references project 2 and project 3)
| \bin
|
|
--Project2
| \bin
| \proj4.dll (v1.5)
|
--Project 3
\bin
\proj4.dll (v1.2)
Когда создается решение, сначала проект 1 принудительно компилирует проект 3 и копирует все связанные библиотеки в свою папку bin.Структура теперь выглядит следующим образом:
Solution
|
--Project 1 (references project 2 and project 3)
| \bin
| \proj3.dll
| \proj4.dll (v1.2)
|
|
--Project2
| \bin
| \proj4.dll (v1.5)
|
--Project 3
\bin
\proj4.dll (v1.2)
Следующим компилируется проект 2, но поскольку по умолчанию для specific-version установлено значение false, проект 1 увидит, что в каталоге bin уже есть версия proj4.dll.что достаточно для проекта 2. Поэтому он будет копировать только proj2.dll, и структура выглядит следующим образом:
Solution
|
--Project 1 (references project 2 and project 3)
| \bin
| \proj2.dll
| \proj3.dll
| \proj4.dll (v1.2)
|
|
--Project2
| \bin
| \proj4.dll (v1.5)
|
--Project 3
\bin
\proj4.dll (v1.2)
Пожалуйста, не стесняйтесь поправлять меня, любого, если они не согласны.Но я почти уверен, что именно поэтому вы видите то, что видите (если я понимаю вопрос).