Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Однофайловые и многофайловые сборкиСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
В большом количестве случаев между сборками.NET и файлами двоичного кода (*.dll или *.ехе) соблюдается простое соответствие «один к одному». Следовательно, получается, что при построении DLL-библиотеки.NET, можно спокойно полагать, что файл двоичного кода и сборка представляют собой одно и то же, и что, аналогичным образом, при построении исполняемого приложения для настольной системы на файл EXE можно ссылаться как на саму сборку. Однако это не совсем так. С технической точки зрения, сборка, состоящая из одного единственного модуля *.dll или *.ехе, называется однофайловой сборкой. В однофайловых сборках все необходимые CIL-инструкции, метаданные и манифесты содержатся в одном автономном четко определенном пакете. Многомофайловые сборки, в свою очередь, состоят из множества файлов двоичного кода.NET, каждый из которых называется модулем (module). При построении многофайловой сборки в одном из её модулей (называемом первичным или главным (primary) модулем) содержится манифест (объявление) самой сборки (и, возможно, СIL-инструкции и метаданные по различным типам), а во всех остальных — манифест, CIL-инструкции и метаданные типов, охватывающие уровень только соответствующего модуля. Как нетрудно догадаться, в главном модуле содержится описание набора требуемых дополнительных модулей внутри манифеста сборки. Промежуточный язык CIL Промежуточный язык CIL
Промежуточный язык CIL
Промежуточный язык Common Intermediate Language (CIL) очевидно играет фундаментальную роль в среде .NET. Теперь имеет смысл внимательнее рассмотреть основные характеристики CIL, поскольку логично, что любой язык, предназначенный для.NET, также должен поддерживать эти основные характеристики CIL.
Важнейшие свойства CIL могут быть сформулированы следующим образом:
Давайте рассмотрим первые два свойства более подробно: 1. Поддержка объектной ориентации и интерфейсов. Независимость.NET от языка имеет некоторые практические ограничения. IL неизбежно должен воплощать некоторую определенную методологию программирования, а это означает, что исходный язык также должен быть совместим с этой методологией. Принцип, которым руководствовались в Microsoft при создании IL: классическое объектно-ориентированное программирование с реализацией одиночного наследования классов. В дополнение к классической объектной ориентации в языке IL также введено понятие «Интерфейс », которое впервые было реализованы под Windows с появлением СОМ. Интерфейсы, построенные с использованием.NET — это не то же самое, что интерфейсы СОМ; им не требуется поддержка со стороны инфраструктуры СОМ (так, например, они не наследуются от IUnknown и не имеют ассоциированных глобальных идентификаторов (Globally Unique Identifier ― GUID). Однако они разделяют с интерфейсами СОМ идею предоставления контракта, и классы, реализующие заданный интерфейс, должны предлагать реализацию методов и свойств, специфицированных этим интерфейсом. Так же, язык CIL имеет способность языкового взаимодействия, под которой подразумевается возможность для классов, написанных на одном языке, напрямую обращаться к классам, написанным на другом языке, т.е.:
2. Различие типов значений и типов ссылок. Как и любой язык программирования, IL предлагает множество предопределенных примитивных типов данных. Одна из особенностей IL, однако, заключается в том, что он делает четкое различие значениями и ссылочными типами. Типы значений — это те, переменные которых непосредственно хранят их данные. Ссылочные типы — это те, переменные которых просто хранят адрес, по которому соответствующие данные могут быть найдены. В терминах С++, ссылочные типы можно рассматривать, как будто они обращаются к переменным через указатель, в то время как для Visual Basic лучшая аналогия для ссылочных типов — это объекты, обращение к которым в Visual Basic 6 всегда осуществляется по ссылке. В языке IL также установлена своя спецификация относительно хранения данных: экземпляры ссылочных типов всегда хранятся в области памяти, известной как управляемая куча (managed heap). Типы значений обычно хранятся в стеке (хотя, если типы значений объявлены как поля внутри ссылочных типов, то они также будут сохранены в управляемой куче).
Утилита ildasm.exe
Утилита ildasm.exe ( Intermediate Language Disassembler — дизассемблер промежуточного языка ), которая поставляется в составе пакета .NET Framework 4 SDK, позволяет загружать любую сборку.NET и изучать её содержимое, в том числе ассоциируемый с ней манифест, CIL-код и метаданные типов. По умолчанию эта утилита установлена по следующему пути (для Windows 7)^ С:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin (если здесь её нет, нужно искать на компьютере файл по имени «ildasm.exe»).
Утилиту IL DASM («Дизассемблер IL», файл ildasm.exe) можно найти по умолчанию по следующему пути (для Windows 7): Пуск -> Все программы -> Microsoft Visual Studio 2010 -> Microsoft Windows SDK Tools -> Дизассемблер IL. Главное окно утилиты выглядит так:
Рис. 2. 1. Окно утилиты IL DASM (ildasm.exe)
Также, утилиту можно вызвать через командную строку (Пуск -> Все программы -> Microsoft Visual Studio 2010 -> Visual Studio Tools -> Командная строка Visual Studio (2010)), введя строчку «ildasm» и нажав Enter:
Рис. 2. 2. Вызов утилиты ildasm.exe через командную строку среды разработки Visual Studio 2010
Давайте сначала составим простейшую сборку (скомпилируем в среде разработки консольное приложение; такой тип проектов можно найти на вкладке Установленные шаблоны -> Visual C # при создании нового проекта):
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace LC_Console { class Program { static void Main(string[] args) { int a = 10; Console.WriteLine(a); Console.ReadLine(); } } }
Скомпилируем (в любой доступной конфигурации: Debug или Release) и откроем получивший EXE файл через утилиту ildasm.exe:
Рис. 2. 3. Открываем скомпилированное приложение LC_Console.exe (с кодом выше) утилитой IL DASM
Помимо содержащихся в сборке пространств имен, типов и членов, утилита ildasm.ехе также позволяет просматривать и CIL-инструкции, которые лежат в основе каждого конкретного члена. Например, в результате двойного щелчка на методе Main в классе Program открывается отдельное окно с CIL-кодом, лежащим в основе этого метода:
Рис. 2. 4. CIL-код метода Main
Для просмотра метаданных типов, которые содержатся в загруженной в текущий момент сборке, необходимо нажать комбинацию клавиш Ctrl + M.
Рис. 2. 5. Окно MetaInfo утилиты IL DASM для приложения LC_Console.exe
И, наконец, чтобы просмотреть содержимое манифеста сборки, необходимо дважды щёлкнуть на значке MANIFEST:
Рис. 2. 6. Окно MANIFEST утилиты IL DASM для приложения LC_Console.exe
Несомненно, утилита ildasm.ехе обладает большим, чем было показано здесь количеством функциональных возможностей.
|
||||
Последнее изменение этой страницы: 2016-08-15; просмотров: 592; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.188.161 (0.011 с.) |