Как имена сборок, на которые ссылается .NET, разрешаются clr во время выполнения?

когда мой .net exe запускается, он загружает правильные сборки .net во время работы. Я понимаю, что происходит зондирование.

Мой вопрос в том, что если я открою .net exe / dll в ildasm, я буду использовать только ссылку .extern на mscorlib.dll, а не другие.

Итак, как clr получает информацию, необходимую для проверки сборок, на которые ссылаются .NET?

У меня есть пример проекта и изображения здесь.

введите описание изображения здесь введите описание изображения здесь

поэтому в этом случае я не вижу ссылок на сборку .net нигде, например System, System.Xml.Linq, Questions и т.д., но, очевидно, они загружаются clr, и я вижу их в моем средстве просмотра журнала Fusion

где находятся данные, необходимые для сборок .net?

Я заметил некоторую несогласованность поведения, когда внешние сборки помещают манифест для некоторых основных DLL-библиотек .net и других внешних DLL-библиотек .net.

Спасибо


person Tiju John    schedule 05.09.2013    source источник
comment
Это не тот же EXE. Ваш disasm - для Questions.exe, ваш след - для Questions.vshost.exe. Что включает в себя процесс хостинга и зависимости отладчика. Запустите Questions.exe вне VS, чтобы сравнить яблоки с апельсинами.   -  person Hans Passant    schedule 05.09.2013
comment
Я знаю, я только что разместил новую картинку.   -  person Tiju John    schedule 05.09.2013
comment
@John: Подсказка: если вы достаточно внимательны, вы можете также затемнить строку заголовка ILDASM.   -  person Christian.K    schedule 06.09.2013


Ответы (1)


Я понял. На самом деле я немного запутался. то, что показывает ILdasm, правильно. Все статически связанные библиотеки DLL помещаются в манифест библиотеки DLL.

Мы не видели системных ссылок, потому что у mscorlib есть часть пространства имен «System»; Sysem.dll в GAC содержит остальные классы в этом пространстве имен. Таким образом, пространство имен System разделено на две библиотеки DLL. Чаще всего и базовые находятся в mscorelibrary.dll, остальные в system.dll

На самом деле Visual studio немного вводит в заблуждение, показывая System.dll всегда как ссылку, что не всегда верно

Когда я использовал

     var bvv = new System.Uri("http://www.google.com"); ------ System.Uri class is in System.dll

     Console.WriteLine(bvv.AbsolutePath);--------------------- System.Console class is in mscorlib.dll

я мог ясно видеть ссылку на System.dll

введите описание изображения здесь

person Tiju John    schedule 05.09.2013