2009-08-24 4 views
1

У меня есть 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 ссылается на два других проекта.

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

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

+0

Какие версии Visual Studio вы используете? Используете ли вы ссылки на проекты или ссылки на файлы? Как выглядят HintPaths в файле проекта? Это нормально, когда библиотеки DLL копируются, как вы описываете. –

+0

Я использую vs2005 sp1 (Также бывает без установки sp). проект A ссылается на EL dll в виде файла (внутри папки lib) и ** не ** из GAC. Проект B ссылается на Miner.Geodatabase.dll (ver 9.30.2.5168) через GAC, и после компиляции получает странную EL DLL с ней. Я не понимаю, откуда эта dll. Но проекты, которые ссылаются как на A, так и на B, получают эту странную dll, а A не работает во время выполнения. –

ответ

0

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

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