Компоновка проекта

86

Visual Studio помогает не только с написанием кода проектов. На самом деле Visual Studio представляет собой IDE-среду, которая позволяет управлять всем жизненным циклом проекта, компоновкой и компиляцией решений. В данной статье рассказывается о возможностях, которые Visual Studio предлагает для компоновки проектов.

Компоновка, компиляция и построение проекта

Прежде чем приступать к изучению различных возможностей, которые доступны для компоновки проектов, важно прояснить кое-какие термины. При рассмотрении процесса получения из исходного кода некоторой разновидности исполняемого кода будут часто встречаться три разных термина: компиляция (compilation), компоновка (building) и построение (making) проекта. Своим происхождением эти термины обязаны тому факту, что до недавнего времени процесс превращения исходного кода в исполняемый подразумевал прохождение более чем одного этапа (для С++ это есть и по сей день). В значительной мере это было обусловлено наличием в программах многочисленных файлов исходного кода.

В С++, например, каждый файл исходного кода необходимо компилировать отдельно. Этот процесс называется компиляцией и приводит к получению так называемых объектных файлов, каждый из которых представляет собой подобие исполняемого кода, но в то же время имеет отношение только к одному исходному файлу. Для генерации исполняемого файла эти объектные файлы должны связываться вместе; этот процесс формально называется связыванием. Обычно — по крайней мере, если говорить о платформе Windows — процесс, представляющий собой сочетание двух вышеуказанных процессов, называется компоновкой или построением. Однако в C# компилятор имеет более совершенную природу и способен считывать и обрабатывать все файлы исходного кода в виде одного блока. По этой причине отдельного этапа связывания не существует, и потому в контексте C# термины компиляция и компоновка применяются как взаимозаменяемые.

Вдобавок используемым при работе с проектами термин построить (make) означает, по сути, то же самое, что и термин скомпоновать (build), хотя в контексте C# он особо не применяется. Этот термин возник в эпоху больших вычислительных машин, на которых проект формировался из множества исходных файлов. При этом создавался специальный файл с инструкциями относительно того, как компилятор должен компоновать проект, т.е. какие файлы включать, на какие библиотеки ссылаться и т.д. Такой файл назывался make-файлом и до сих пор довольно часто применяется в системах Unix. В системах Windows его обычно создавать не требуется, хотя при необходимости его можно написать (или заставить Visual Studio его генерировать).

Оптимизация

Высокая производительность достигается отчасти за счет выполнения компилятором в отношении кода многочисленных операций оптимизации. Это означает, что компилятор активно изучает исходный код по мере его компиляции и выявляет в нем места, где он может изменить детали так, чтобы общий результат оставался прежним, но достигался более эффективным путем. Например, показанный ниже фрагмент кода:

{
string Message = "Привет";
Console.WriteLine(Message);
}

компилятор может заменить следующей строкой:

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

В результате устраняется необходимость в объявлении ненужных объектных ссылок.

Точно предсказывать, какие операции по оптимизации выполнит компилятор C#, невозможно, равно как и утверждать, что приведенный выше пример будет иметь место в реальном сценарии, поскольку детали подобного рода нигде не документированы. (Скорее всего, в случае управляемых языков вроде C# показанные выше операции по оптимизации будут выполняться во время JIT-компиляции, но не при компиляции исходного кода в сборку.) По коммерческим причинами компании, занимающиеся разработкой компиляторов, обычно предпочитают не раскрывать слишком много деталей касательно того, к каким хитростям прибегают их компиляторы. Важно отметить, что операции по оптимизации на исходный код никоим образом не влияют, они влияют только на содержимое исполняемого кода.

Выбор конфигурации

Поскольку среда Visual Studio может хранить детали более чем одной конфигурации, возникает вопрос, каким образом она выбирает конфигурацию для использования при подготовке проекта к компоновке? Ответ очень прост: какая-то из конфигураций всегда является активной, и именно ее Visual Studio использует при запуске компоновки проекта. (Обратите внимание, что конфигурации настраиваются для каждого проекта, а не для каждого решения.)

По умолчанию при создании проекта активной делается конфигурация Debug. Чтобы сделать активной другую конфигурацию, выберите в меню Build (Компоновка) пункт Configuration Manager (Диспетчер конфигураций) или выберите желаемый вариант в раскрывающемся меню прямо в основной панели инструментов Visual Studio.

Редактирование конфигураций

Конфигурации можно также просматривать и редактировать. Для этого выделите интересующий проект в окне Solution Explorer и выберите в меню Project (Проект) пункт Properties (Свойства). Откроется довольно сложное диалоговое окно. (Для доступа к этому окну можно также щелкнуть правой кнопкой мыши на имени интересующего проекта в окне Solution Explorer и выбрать в контекстном меню пункт Properties (Свойства).)

Древовидная структура в этом окне позволяет выбирать для просмотра и редактирования множество различных областей:

Диалоговое окно свойств приложения
Пройди тесты
Лучший чат для C# программистов