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

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

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

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

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

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

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

я заметил некоторые противоречивые поведения поведения, как внешние сборки ставят манифест для некоторых базовых.net библиотек и других внешних.net библиотек.

Спасибо

1 ответ

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

Почему мы не видим системных ссылок, потому что у mscorlib есть часть пространства имен System; Sysem.dll в GAC имеет остальные классы в этом пространстве имен. Таким образом, пространство имен системы разделено на две библиотеки. Чаще всего и основные из них находятся в 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

Другие вопросы по тегам