Здесь есть два сценария - использование сильных имен/GAC или использование сильных имен.
Если вы используете сильные имена и устанавливаете компоненты в GAC, тогда .Net захочет использовать версию компонента, которую клиент ссылался при компиляции. Таким образом, в вашем примере было бы вполне возможно, что Project будет ссылаться на базу данных V2, тогда как Logging ссылается на базу данных V1, поскольку библиотеки DLL могут храниться параллельно в GAC. Поэтому, если вы действительно хотите, чтобы Logging использовал V2 вместо V1, вам нужно будет изменить файлы конфигурации, чтобы сказать, что «ссылка на V1 должна быть указана на V2». Для этого есть разные места: файл приложения, машинный файл и т. Д.
Если вы не используете сильные имена, то.По умолчанию Net будет использовать версию DLL, находящуюся в той же папке, что и клиент. Предположим, что вы развертываете Project, CommonControls и Logging в той же папке, что и база данных V2. Тогда даже если Logging был создан против базы данных V1, он попытается использовать компонент в той же папке, то есть в базе данных V2. Пока V2 может предоставлять те же общедоступные классы и методы, которые Logging хочет использовать, он будет работать нормально.
В моей среде, где все наши приложения являются внутренними, мы не используем GAC. Мы просто разворачиваем все файлы, необходимые для приложения, в одну папку. Когда у вас много общих компонентов, просто будет кошмаром, чтобы синхронизировать файлы конфигурации.
Все это очень сильно отличается от COM, где все приложения загружают зарегистрированную в настоящий момент копию DLL (при условии, что V1 и V2 совместимы с бинарными).
Спасибо за сборку Ссылки на ссылку, но не можете найти это свойство конкретной версии vs2008 для проекта веб-сайта? – alexmac 2008-10-09 11:09:13