Как узнать, какой проект загружается первым - PullRequest
0 голосов
/ 29 октября 2010

Когда я включаю несколько проектов в свое решение и изменяю ссылки на Ссылки проекта, иногда он все еще загружает неправильную сборку, потому что есть что-то еще, называющее это ПЕРВОЙ, и эта вещь не включена в мое решение.когда количество проектов увеличивается, становится все труднее находить эти объекты ... с кем вы имеете дело с этим?

1 Ответ

1 голос
/ 29 октября 2010

Я использую инструмент 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)

Пожалуйста, не стесняйтесь поправлять меня, любого, если они не согласны.Но я почти уверен, что именно поэтому вы видите то, что видите (если я понимаю вопрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...