Странное поведение dll (капитальный ремонт вопроса) - PullRequest
1 голос
/ 24 августа 2009

У меня есть проект dll, который ссылается на Microsoft.Practices.EnterpriseLibrary.Common.dll (= " dll ") из моего установочного каталога Microsoft Enterprise Library 3.1 . У него есть открытый ключ, который начинается с "b03f".
У меня есть другой проект, который ссылается на Miner.Geodatabase.dll версия 9.30.2.5168 (он показывает 9.2.0.0 в папке GAC). DLL-файл Miner имеет открытый ключ, начинающийся с «196b».
Третий DLL ссылается на два других.

Вот простое решение vs2005 с вышеуказанными проектами ELTest.rar -
1. RefEL, просто ссылается на dll из папки lib.
2. RefGeodatabse, просто ссылается на Miner.Geodatabase.dll из GAC.
3. RefBoth, ссылается на два других проекта.

После компиляции папка bin / debug в RefEL содержит «b03f» («настоящую») версию dll , в то время как bin / debug в RefGeodatabase и RefBoth содержат версию dll с открытым ключом, начинающимся с "196b" - то же самое, что и dll Miner. Мне кажется, что они перекомпилировали корпоративную библиотеку (и, возможно, что-то изменили).
Во время выполнения (в моем реальном решении, а не в этом фиктивном решении) мои "оба" проекта вызывают проект "EL", которому требуется dll "b03f", не удается найти его и происходит сбой.

Что я должен делать? Возможно, если я зарегистрирую библиотеки Enterprise Library в GAC, они будут найдены во время выполнения. Есть ли другое решение, которое не требует от меня установки entlib на целевой компьютер?

1 Ответ

0 голосов
/ 25 августа 2009

Ну, я решил зарегистрировать обычную ("b03f") версию библиотеки предприятия в моем GAC (а также на рабочих компьютерах). Я использовал эту ссылку, чтобы зарегистрировать все библиотеки одновременно. работал как шарм.

Теперь мой проект RefEL ссылается на версию GAC dll , и хотя RefGeodatabase имеет Miner.Geodatabase.dll, которая ссылается на версию «196b» из GAC с CopyLocal = true во время выполнения мой проект находит версию "b03f" в GAC и не падает.

...