Приоритеты загрузки сборок .NET - PullRequest
17 голосов
/ 22 октября 2009

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

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

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

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

ТКС заранее

Ответы [ 2 ]

20 голосов
/ 22 октября 2009

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

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

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

7 голосов
/ 22 октября 2009

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

...