Как имена сборок, на которые имеются ссылки.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