Опция Описание
/debug Включает информацию отладки (такую как имена локальных переменных и аргументов, а также номера строк)
/dll Создает выходной файл" *.dll
/exe Создает выходной файл *.exe. Это значение устанавливается по умолчанию, поэтому его можно опустить
/key Компилирует компоновочный блок со строгим именем, используя заданный файл *.snk
/noautoinherit Запрещает автоматическое наследование типов класса из System. Object, когда конкретный базовый класс не определен
/output Указывает имя и расширение выходного файла. Если флаг /output не используется, имя выходного файла будет соответствовать имени первого исходного файла

Чтобы откомпилировать обновленный файл simplehelloclass.il в .NET-файл *.exe, в командном окне Visual Studio 2005 выполните следующую команду.

ilasm.exe HelloProgram.il

Если все пройдет без сбоев, вы должны получить вывод, подобный показанному на рис. 15.1.

Рис. 15.1. Компиляция файлов *.il с помощью ilasm.exe

После этого вы сможете выполнить свое новое приложение. Достаточно очевидно, что теперь вместо сообщения в окне консоли вы должны увидеть окно Windows с вашим сообщением (рис. 15.2).

Рис. 15.2. Результат челночной технологии

<p>Компиляция CIL-кода с помощью SharpDevelop</p>

Для работы с файлами *.il вы можете использовать бесплатную среду разработки SharpDevelop (см. главу 2). При создании нового "комбината" (для этого выберите File→New Combine из меню), одним из вариантов выбора является создание рабочего пространства CIL-проекта. Хотя SharpDevelop пока что не предлагает поддержку IntelliSense для CIL-проектов, лексемы CIL выделяются цветом, и вы получаете возможность компилировать и выполнять свои приложения непосредственно в окне IDE (а не в командной строке, как в случае ilasm.exe).

<p>Компиляция CIL-кода с помощью ILIDE#</p>

Если вам интересно поэкспериментировать с языком программирования CIL, рекомендую загрузить самую последнюю версию бесплатного редактора исходных текстов CIL, имеющего открытый код и название ILIDE#. Этот инструмент, подобно SharpDevelop, обеспечивает выделение цветом ключевых слов и программных структур, интеграцию с ilasm.exe и набор соответствующих инструментов. В отличие от SharpDevelop, последняя версия ILIDE# поддерживает IntelliSense для CIL. Установщик ILIDE# можно загрузить со страницы http://ilide.aspfreeserver.com/default-en.aspx (этот адрес URL может измениться). На рис. 15.3 показано окно ILIDE# в действии.

Рис. 15.3. Редактор ILIDE# – бесплатная среда разработки для CIL

<p>Роль peverify.exe</p>

При создании или модификации компоновочных блоков, в которых используется программный код CIL, всегда целесообразно проверить, будет ли скомпилированный двоичный образ правильно сформирован с точки зрения правил .NET. Для этого можно использовать средство командной строки peverify.exe.

peverifу HelloProgram.exe

Этот инструмент проверит все коды операций в указанном компоновочном блоке на соответствие правилам CIL. Например, в терминах CIL-кода стек оценок должен всегда опустошаться: перед выходом из функции, Если вы забудете извлечь из него какие-то значения, компилятор ilasm.exe все равно сгенерирует допустимый компоновочный блок (поскольку компиляторы "заботятся" только о синтаксисе).

А вот peverifу.exe, с другой стороны, заботится о семантике. Если вы забудете очистить стек перед выходом из функции, peverify.exe сообщит вам об этом.

Исходный код. Файл HelloProgram.il размещен в подкаталоге, соответствующем главе 15.

<p>Директивы и атрибуты CIL</p>

Теперь, когда вы знаете, как использовать ildasm.exe и ilasm.exe в рамках челночной технологии разработки, мы можем заняться непосредственным анализом синтаксиса и семантики CIL. Следующие разделы предлагают описание процесса построения пользовательского пространства имен, содержащего определенный набор типов. Чтобы упростить рассмотрение, эти типы не будут содержать никакого программного кода реализации их членов. После того как вы поймете, как создаются пустые типы, вы сможете сосредоточить все свое внимание на процессе создания "реальных" членов типа с помощью кодов операций CIL.

<p>Ссылки на внешние компоновочные блоки</p>
Перейти на страницу:

Похожие книги