Керівництво c #, компілятор
Насправді необхідність в створенні великих додатків з використанням одного лише компілятора командного рядка C # може ніколи не виникнути, тим не менш, важливо розуміти в загальному, як вручну компілювати файли коду. Існує кілька причин, за якими освоєння цього процесу може виявитися корисним:
Робота може виконуватися в університеті, де використання інструментів для генерації коду і IDE-середовищ зазвичай заборонено.
Планується застосування автоматизованих засобів розробки, таких як msbuild.exe, які вимагають знати опції командного рядка для використовуваних інструментів.
Виникло бажання поглибити свої знання в C #. У графічних IDE-середовищах в кінцевому підсумку все закінчується наданням компілятору csc.ехе інструкцій щодо того, що слід робити з вхідними файлами коду C #. В цьому відношенні вивчення того, що відбувається "за кулісами" дозволяє отримати необхідні знання.
Ще одна перевага підходу з використанням одного лише компілятора csc.ехе полягає в тому, що він дозволяє здобути навички і відчувати себе більш впевнено при роботі з іншими інструментами командного рядка, що входять до складу .NET Framework 4.0 SDK. так як цілий ряд важливих утиліт працює виключно в режимі командного рядка.
Після закінчення введення збережіть файл під ім'ям TestApplication.cs. Тепер давайте ознайомимося з ключовими опціями компілятора C #.
Вказівка цільових вхідних і вихідних параметрів
Насамперед важливо розібратися з тим, як вказувати ім'я і тип створюваної збірки (тобто наприклад, консольний додаток на ім'я MyShell.exe, бібліотека коду на ім'я MathLib.dll або додаток Windows Presentation Foundation по імені Halo8.ехе). Кожен з можливих варіантів має відповідний прапор, який потрібно передати компілятору csc.ехе у вигляді параметра командного рядка.
Зверніть увагу, що параметри, що передаються компілятору командного рядка (а також більшості інших утиліт командного рядка), можуть супроводжуватися префіксом у вигляді символу дефіса (-) або слеша (/).
Вихідні параметри, які може приймати компілятор C # наведені в наступній таблиці:
Параметри компілятора csc.exe
Цей параметр застосовується для вказівки імені створюваної збірки. За замовчуванням збірці присвоюється той же ім'я, що у вхідного файлу * .сs
Цей параметр дозволяє створювати виконується консольний додаток. Збірка такого типу генерується за замовчуванням, тому при створенні подібного програми даний параметр можна опускати
Цей параметр дозволяє створювати однофайловий збірку * .dll
Цей параметр дозволяє створювати модуль. Модулі є елементами багатофайлових збірок
Хоча додатки з графічним призначеним для користувача інтерфейсом можна створювати із застосуванням параметра / target: ехе, параметр / target: winexe дозволяє запобігти відкриття вікна консолі під іншими вікнами
Щоб скомпілювати TestApplication.cs в консольний додаток TestApplication.exe, перейдіть в каталог, в якому був збережений файл вихідного коду (за допомогою прапора cd) і введіть наступну команду:

Зверніть увагу, що тут C: \ myProject - це шлях до папки, в якій зберігається файл TestApplication.cs. Так само зверніть увагу, що тут прапор / out не було зазначено явним чином, тому виконуваним файл отримає ім'я TestApplication.ехе через те, що ім'ям вхідного файлу є TestApplication. Крім того, для багатьох прийнятих компілятором C # прапорів підтримуються скорочені версії написання, на зразок / t замість / target (повний список яких можна побачити, ввівши в командному рядку команду csc -?).
Тепер можна спробувати запустити додаток TestApplication.ехе з командного рядка, ввівши ім'я його виконуваного файлу:

Додавання посилань на зовнішні збірки
Давайте подивимося, як скомпілювати додаток, в якому використовуються типи, певні в окремій збірці .NET. Якщо залишилося неясним, яким чином компілятору C # вдалося зрозуміти посилання на тип System.Console, згадайте, що під час процесу компіляції відбувається автоматичне додавання посилання на mscorlib.dll (якщо з якоїсь незвичайної причини потрібно відключити цю функцію, слід передати компілятору csc. exe параметр / nostdlib).
Модифікуємо додаток TestApplication так, щоб в ньому відкривалося вікно повідомлення Windows Forms. Для цього відкрийте файл TestApplication.cs і змініть його наступним чином:
Далі в командному рядку потрібно проінформувати компілятор csc.exe про те, в який збірці містяться використовувані простору імен. Оскільки застосовувався клас MessageBox з простору імен System.Windows.Forms, значить, потрібно вказати компілятору на збірку System.Windows.Forms.dll, що робиться за допомогою прапора / reference (або його скороченій версії / r):

Якщо тепер знову спробувати запустити додаток, то крім консольного виведення в ньому має з'явитися ще й вікно з повідомленням:

До речі, як вчинити, коли необхідно вказати csc.exe кілька зовнішніх збірок? Для цього потрібно просто перерахувати всі збірки через крапку з комою. У розглянутому прикладі посилатися на кілька збірок не потрібно, але нижче приведена команда, яка ілюструє перерахування безлічі збірок:
csc /r:System.Windows.Forms.dll;System.Drawing.dll * .cs
Компіляція декількох файлів вихідного коду
У поточному прикладі додаток TestApp.exe створювалося з використанням єдиного файлу вихідного коду *. cs. Хоча визначати всі типи .NET в одному файлі * .cs цілком допустимо, в більшості випадків проекти формуються з декількох файлів * .cs для додання кодової базі більшої гнучкості. Щоб стало зрозуміліше, давайте створимо новий клас і збережемо його в окремому файлі на ім'я HelloMessage.cs:
Змінимо вихідний клас TestApplication так, щоб в ньому використовувався клас цього нового типу:
Щоб скомпілювати файли вихідного коду на C #. необхідно їх явно перерахувати як вхідні файли:
В якості альтернативного варіанту компілятор C # дозволяє використовувати груповий символ (*) для включення в поточну збірку всіх файлів * .cs, які містяться в каталозі проекту:

Висновок, який отримують після запуску цієї програми, ідентичний попередній програмі. Єдина відмінність між цими двома додатками пов'язано з рознесенням логіки по декількох файлах.
Робота з відповідними файлами в C #
Як не важко здогадатися, для створення складного додатка C # з командного рядка треба було б вводити обтяжлива кількість вхідних параметрів для повідомлення компілятора про те, як він повинен обробляти вихідний код. Для полегшення цього завдання в компіляторі C # підтримується використання так званих відповідних файлів (response files).
Тепер за умови збереження даного файлу в тому ж каталозі, де знаходяться підлягають компіляції файли вихідного коду на C #, все додаток можна буде створити такий спосіб (зверніть увагу на застосування символу @):
У разі необхідності допускається також вказувати і кілька відповідних * .rsp файлів в якості вхідних параметрів (наприклад, csc @ FirstFile.rsp @ SecondFile.rsp @ ThirdFile.rsp). При такому підході, однак, слід мати на увазі, що компілятор обробляє параметри команд у міру їх надходження. Отже, аргументи командного рядка, що містяться у вступнику пізніше файлі * .rsp, можуть перевизначати параметри з попереднього відповідного файлу.
Останнім моментом, пов'язаним з відповідними файлами, про який необхідно згадати, є те, що з компілятором C # асоційований відповідь файл csc.rsp, який використовується за умовчанням і розміщений в тому ж самому каталозі, що і файл csc.ехе (зазвичай це С: \ Windows \ Microsoft. NET \ Framework \

Варто відзначити, що в разі додавання за допомогою опції / r посилань на збірки, які насправді не використовуються, компілятор їх проігнорує. Тому турбуватися з приводу "розбухання коду" не потрібно.