Неправильная версия строгого имени Dll успешно загружается - PullRequest
0 голосов
/ 04 ноября 2011

У меня необычная проблема с загрузкой сборки.Допустим, у нас есть Foo.dll, которая ссылается на версию 1.0.0.0 FooInfra.dll, которая является строгим именем со знаком.

Мы используем внешний исполняемый файл для загрузки Foo.dll и вызова в нем MyMethod ().По какой-то причине при запуске exe-файла в определенном режиме, назовем его «Режим A», MyMethod () успешно запускается, даже если FooInfra.dll версии 2.0.0.0 была случайно развернута.Если запустить его в «режиме B», мы получим ожидаемую ошибку, что правильная сборка не была найдена.

Мой вопрос: как это возможно?Я думал, что со строгими именованными сборками должна использоваться правильная версия.Я уже подключил с помощью windbg, чтобы убедиться, что он не загружает FooInfra.dll из другого места в режиме A, и это не так - это действительно загрузка версии 2.0.0.0.

Возможно ли, что в режимеО, внешний исполняемый файл явно загружает DLL, минуя строгую проверку имени при запуске MyMethod, поскольку сборка загружается только?

Любое понимание проблемы или способы отладки / диагностики будет с благодарностью.Спасибо!

1 Ответ

1 голос
/ 04 ноября 2011

Вы не указываете, как нагрузка отличается в каждом конкретном случае.Кроме того - вместо windbg я бы использовал Fusion для регистрации загрузки вашей сборки.Он покажет вам, какие пути проверяются, и вы увидите, полностью ли он игнорирует строгое имя в случае 2.

Без дополнительных технических подробностей, кроме тех, которые трудно сказать.Если у foo есть ссылка (проверка в отражателе) на сборку со строгим именем, ИСПОЛЬЗУЮЩУЮ также строгое имя, я ожидаю, что это не удастся, но возможно, что есть документация, однако вы загружаете в режиме A, который по своей конструкции пропускает проверки (сноватребуется больше деталей)

Вы случайно используете опцию -Vr?http://www.lookout.net/2006/04/09/bypassing-strong-name-verification-for-a-net-assembly/

...