Как во время выполнения .NET находить сборки без строгих имен? - PullRequest
5 голосов
/ 12 февраля 2010

У нас есть разные версии сборок со строгими именами, и в app.exe.config нет перенаправлений / путей привязки к ним. Например, MyDll (1.0.0.0_null_neutral) и MyDll (2.0.0.0_null_neutral). Относительно app.exe эти сборки хранятся в LAC \ MyDll_1.0.0.0_null_neutral и LAC \ MyDll_2.0.0.0_null_neutral.

Насколько я понимаю, поскольку сборки MyDll не имеют строгих имен, среда выполнения .NET не делает различий между различными версиями MyDll. Поэтому, если MyDll 1.0.0.0 уже были загружены в память и был выполнен некоторый код, созданный для MyDll 2.0.0.0, среда выполнения .NET не будет загружать MyDll 2.0.0.0.

Однако, когда я подключился к процессу с VS2008 и посмотрел окно модулей, я заметил, что MyDll 1.0.0.0 и MyDll 2.0.0.0 были загружены из папки LAC.

Кажется, где-то есть пробел в моем понимании. Может кто-нибудь указать на это?

EDIT: Спасибо за ответы до сих пор. Да, я пропустил этот бит. Исполняемый файл прослушивает событие AssemblyResolve и обрабатывает его, просматривая LAC.

Я был почти уверен, что видел некоторую документацию MSDN до того, как указанные версии игнорировались, если сборка не имеет строгого имени. Я посмотрю, смогу ли я выкопать это.

1 Ответ

1 голос
/ 12 февраля 2010

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

Шаг 2 проверяет, загружен ли он, и это зависит от версии, даже если элементы не имеют строгого имени.

Шаг 4 пытается загрузить сборку с помощью зондирования, и это не зависит от версии.

Что меня смущает, так это то, что если у вас нет никакой информации в вашем конфигурационном файле, как он вообще находит DLL? Я думаю, что в моем понимании есть пробел :-).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...