Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический_курс.doc
Скачиваний:
37
Добавлен:
10.11.2019
Размер:
7.68 Mб
Скачать

3. Компилятор «csc.Exe»: указание целевых входных и выходных параметров

Первым делом важно разобраться с тем, как указывать имя и тип создаваемой сборки (т.е., например, консольное приложение по имени MyShell.exe, библиотека кода по имени MathLib.dll или приложение Windows Presentation Foundation по имени HL3.ехе). Каждый из возможных вариантов имеет соответствующий флаг, который нужно передать компилятору csc.ехе в виде параметра командной строки.

Обратим внимание, что параметры, передаваемые компилятору командной строки (а также большинству других утилит командной строки), могут сопровождаться префиксом в виде символа дефиса (-) или слеша (/).

Выходные параметры, которые может принимать компилятор C# приведены в следующей таблице:

Параметр

Описание

/out

Этот параметр применяется для указания имени создаваемой сборки. По умолчанию сборке присваивается то же имя, что у входного файла *.сs

/target:exe

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

/target:library

Этот параметр позволяет создавать однофайловую сборку *.dll

/target:module

Этот параметр позволяет создавать модуль. Модули являются элементами многофайловых сборок

/target:winexe

Хотя приложения с графическим пользовательским интерфейсом можно создавать с применением параметра /target: ехе, параметр /target: winexe позволяет предотвратить открытие окна консоли под остальными окнами

Чтобы скомпилировать LC_Console.cs в консольное приложение LC_Console.exe, перейдём в каталог, в котором был сохранён файл исходного кода (с помощью команд CD) и введём следующую команду (csc /t:exe LC_Console.cs):

Рис. 3. 1. Выполнение компиляции файла LC_Console.cs в EXE-файл

Обратим внимание, что здесь флаг /out не был указан явным образом, поэтому исполняемым файл получит имя LC_Console.ехе из-за того, что именем входного файла является LC_Console. Кроме того, для почти всех принимаемых компилятором С# флагов поддерживаются сокращенные версии написания, наподобие /t вместо /target (полный список которых можно увидеть, введя в командной строке команду csc -?).

Теперь можно попробовать запустить приложение LC_Console.ехе из командной строки, введя имя его исполняемого файла:

Рис. 3. 2. Выполнение скомпилированной сборки LC_Console.exe

4. Добавление ссылок на внешние сборки

Давайте посмотрим, как скомпилировать приложение, в котором используются типы, определённые в отдельной сборке .NET. Если осталось неясным, каким образом компилятору С# удалось понять ссылку на тип System.Console, вспомним, что во время процесса компиляции происходит автоматическое добавление ссылки на mscorlib.dll (если по какой-то необычной причине нужно отключить эту функцию, следует передать компилятору csc.exe параметр /nostdlib).

Модифицируем приложение LC_Console так, чтобы в нём открывалось окно сообщения Windows Forms. Для этого откроем файл LC_Console.cs и изменим его следующим образом:

using System;

using System.Windows.Forms;

namespace LC_Console

{

class Program

{

static void Main()

{

int a = 10;

Console.WriteLine(a);

Console.WriteLine("Привет, мир!");

MessageBox.Show("Привет, мир!");

}

}

}

Далее в командной строке нужно проинформировать компиляторcsc.exe о том, в какой сборке содержатся используемые пространства имён. Поскольку применялся класс MessageBox из пространства имён System.Windows.Forms, значит, нужно указать компилятору на сборку System.Windows.Forms.dll, что делается с помощью флага /reference (или его сокращенной версии /r):

Рис. 4. 1. Применение команды (csc /r:System.Windows.Forms.dll LC_Console.cs) для новой компиляции LC_Console.exe

Если теперь снова попробовать запустить приложение, то помимо консольного вывода в нём должно появиться ещё и окно с сообщением:

Рис. 4. 1. Выполнение новой скомпилированной сборки LC_Console.exe

Кстати, как поступить, когда необходимо указать csc.exe несколько внешних сборок? Для этого нужно просто перечислить все сборки через точку с запятой. В рассматриваемом примере ссылаться на несколько сборок не требуется, но ниже приведена команда, которая иллюстрирует перечисление множества сборок:

csc /r:System.Windows.Forms.dll;System.Drawing.dll *.cs