2009-10-22 2 views
16

У меня есть решение с тремя проектами (GUI, BL и DAL). Узел DAL подписывается и развертывается в GAC..NET сборка приоритетов загрузки

Когда я создаю решение, DAL компилируется и сборка помещается в папку bin основного проекта. Но когда я запускаю приложение, он загружает версию GAC вместо локальной. Почему это?

Я понял, что, поскольку версия в GAC не была последней, и некоторые методы отсутствовали, хотя она скомпилирована в порядке.

Имеет ли GAC приоритет над локальной папкой bin?

Tks заранее

ответ

19

Короткий ответ Да, GAC имеет приоритет над локальными файлами.
Это другое поведение, из которого мы привыкли в родном мире dll (за исключением некоторых системных dll, которые всегда загружались из SYSTEM32 независимо от того, что).

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

Что касается вашей проблемы, если вы меняете API, вам необходимо изменить версию сборки этой сборки, таким образом, механизм фьюжн заберет версию, находящуюся в локальной папке.

+0

Tks для ответа, специально для последней части о версировании. – Dante

7

Да, сначала проверьте GAC. Правила загрузки документированы here. Чтобы устранить проблему, вы должны обновить версию сборки при изменении API.

+0

Tks для связи, очень полезно! – Dante