Компилятор csc.exe
В действительности необходимость в создании крупных приложений с использованием одного лишь компилятора командной строки C# может никогда не возникнуть, тем не менее, важно понимать в общем, как вручную компилировать файлы кода. Существует несколько причин, по которым освоение этого процесса может оказаться полезным:
Самой очевидной причиной является отсутствие Visual Studio 2010 или какой-то другой графической IDE-среды.
Работа может выполняться в университете, где использование инструментов для генерации кода и IDE-сред обычно запрещено.
Планируется применение автоматизированных средств разработки, таких как msbuild.exe, которые требуют знать опции командной строки для используемых инструментов.
Возникло желание углубить свои познания в C#. В графических IDE-средах в конечном итоге все заканчивается предоставлением компилятору csc.ехе инструкций относительно того, что следует делать с входными файлами кода C#. В этом отношении изучение происходящего «за кулисами» позволяет получить необходимые знания.
После окончания ввода сохраните файл под именем TestApplication.cs. Теперь давайте ознакомимся с ключевыми опциями компилятора C#.
Указание целевых входных и выходных параметров
Первым делом важно разобраться с тем, как указывать имя и тип создаваемой сборки (т.е., например, консольное приложение по имени MyShell.exe, библиотека кода по имени MathLib.dll или приложение Windows Presentation Foundation по имени Halo8.ехе). Каждый из возможных вариантов имеет соответствующий флаг, который нужно передать компилятору csc.ехе в виде параметра командной строки.
Обратите внимание, что параметры, передаваемые компилятору командной строки (а также большинству других утилит командной строки), могут сопровождаться префиксом в виде символа дефиса (-) или слеша (/).
Выходные параметры, которые может принимать компилятор C# приведены в следующей таблице:
Параметр | Описание |
---|---|
/out | Этот параметр применяется для указания имени создаваемой сборки. По умолчанию сборке присваивается то же имя, что у входного файла *.сs |
/target:exe | Этот параметр позволяет создавать исполняемое консольное приложение. Сборка такого типа генерируется по умолчанию, потому при создании подобного приложения данный параметр можно опускать |
/target:library | Этот параметр позволяет создавать однофайловую сборку *.dll |
/target:module | Этот параметр позволяет создавать модуль. Модули являются элементами многофайловых сборок |
/target:winexe | Хотя приложения с графическим пользовательским интерфейсом можно создавать с применением параметра /target: ехе, параметр /target: winexe позволяет предотвратить открытие окна консоли под остальными окнами |
Чтобы скомпилировать TestApplication.cs в консольное приложение TestApplication.exe, перейдите в каталог, в котором был сохранен файл исходного кода (с помощью флага cd) и введите следующую команду:
Теперь можно попробовать запустить приложение TestApplication.ехе из командной строки, введя имя его исполняемого файла:
Добавление ссылок на внешние сборки
Модифицируем приложение 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
Компиляция нескольких файлов исходного кода
Изменим исходный класс TestApplication так, чтобы в нем использовался класс этого нового типа:
В качестве альтернативного варианта компилятор C# позволяет использовать групповой символ (*) для включения в текущую сборку всех файлов *.cs, которые содержатся в каталоге проекта:
Вывод, получаемый после запуска этой программы, идентичен предыдущей программе. Единственное отличие между этими двумя приложениями связано с разнесением логики по нескольким файлам.
Работа с ответными файлами в C#
В ответных файлах C# размещаются все инструкции, которые должны использоваться в процессе компиляции текущей сборки. По соглашению эти файлы имеют расширение *.rsp (сокращение от response — ответ). Чтобы посмотреть на них в действии, давайте создадим ответный файл по имени TestApplication.rsp, содержащей следующие аргументы (комментарии в данном случае обозначаются символом #):
Теперь при условии сохранения данного файла в том же каталоге, где находятся подлежащие компиляции файлы исходного кода на C#, все приложение можно будет создать следующим образом (обратите внимание на применение символа @):
В случае необходимости допускается также указывать и несколько ответных *.rsp файлов в качестве входных параметров (например, csc @FirstFile.rsp @SecondFile.rsp @ThirdFile.rsp). При таком подходе, однако, следует иметь в виду, что компилятор обрабатывает параметры команд по мере их поступления. Следовательно, аргументы командной строки, содержащиеся в поступающем позже файле *.rsp, могут переопределять параметры из предыдущего ответного файла.
При создании программ на C# с применением csc.ехе ссылка на этот ответный файл добавляется автоматически, даже когда указан специальный файл *.rsp. Из-за наличия такого ответного файла по умолчанию, рассматриваемое приложение TestApplication.ехе можно скомпилировать и c помощью следующей команды (поскольку в csc.rsp уже содержится ссылка на System.Windows.Forms.dll):
Стоит отметить, что в случае добавления с помощью опции /r ссылок на сборки, которые на самом деле не используются, компилятор их проигнорирует. Поэтому беспокоиться по поводу «разбухания кода» не нужно.
как создать Windows Forms приложение из командной строки
В процедурах ниже описаны основные шаги, которые необходимо выполнить для создания и запуска приложения Windows Forms из командной строки. Visual Studio предлагает расширенную поддержку этих процедур. см. также раздел пошаговое руководство. размещение элемента управления Windows Forms в WPF.
Процедура
Создание формы
В пустом файле кода введите следующую Imports using инструкцию или:
В следующий процедуре будет добавлен дополнительный код конструктора.
примените STAThreadAttribute к Main методу C#, чтобы указать Windows Forms приложение является однопотоковым апартаментом. (атрибут не является обязательным в Visual Basic, так как приложения Windows forms, разработанные с помощью Visual Basic, по умолчанию используют модель подразделений по одному потоку.)
Создайте экземпляр формы и запустите его.
Компиляция и запуск приложения
Если используется C#, введите: csc form1.cs
при использовании Visual Basic введите: vbc form1.vb
Добавление элемента управления и обработка события
В предыдущей процедуре продемонстрировано, как создать простейшую форму Windows Forms, скомпилировать и запустить ее. В следующей процедуре будет показано, как создать и добавить в форму элемент управления и как обрабатывать событие для него. дополнительные сведения об элементах управления, которые можно добавить в Windows Forms, см. в разделе элементы управления Windows Forms.
Объявление элемента управления типа «Кнопка» и обработка событий щелчка мышью для нее
В конструкторе создайте кнопку и задайте ее свойства Size, Location и Text.
Добавьте кнопку в форму.
В следующем примере кода показано, как объявить элемент управления Button:
Создайте метод для обработки события Click для кнопки.
В обработчике событий щелчка мышью выведите элемент управления MessageBox с сообщением «Здравствуй, мир».
В следующем примере кода показано, как обрабатывается событие Click элемента управления Button:
Свяжите событие Click с созданным методом.
В примере кода ниже показано, как связать событие с методом.
Скомпилируйте и запустите приложение, как описано в предыдущей процедуре.
Пример
В следующем примере кода приведен полный пример из предыдущих процедур.
Как скомпилировать windows forms в exe
Лучший отвечающий
Вопрос
Доброе время суток.
Пишу приложение Windows Forms на С#. Работаю в Visual Studio 2015 (и Visual Studio 2010).
Если да, то как? Ранее с таким вопросами не сталкивалсяю
Если нет, то можно ли реализовать это в Visual Studio, если да то «Как? и Где?».
Извиняюсь возможно за глупый вопрос. Заранее спасибо за ответ.
Ответы
Ну кто же знал, что все настолько плохо.
В папке проекта (в физической папке на диске) есть папка bin, а в ней папки debug и release. В них лежит ваш exe. По сути когда вы запускаете проект из студии то в одной из этих папок сначала создается exe и потом он запускается, а студия к нему прикрепляет отладчик. Не буду расписывать отличие debug от release, все это есть в библиотеке MSDN и в каждой второй книге, которые я крайне советую вам почитать.
Все ответы
Извиняюсь возможно за глупый вопрос. Заранее спасибо за ответ.
Правда все это верно, если вы не использовали в программе какие то сторонние компоненты, которых нет в Framefork изначально. Тогда вместе с exe нужно распространять dll этих компонентов.
А вообще это все из разряда младших классов программирования и такие вещи хорошо бы знать
Правда все это верно, если вы не использовали в программе какие то сторонние компоненты, которых нет в Framefork изначально. Тогда вместе с exe нужно распространять dll этих компонентов.
Компиляция в один exe файл
Когда компилирую,у меня в DEBUG папке,лежит много файлов
exe.
.exe.config
.pdb
.dll
.dll
Если я вытащу один exe,то он не будет запускаться
Компиляция в один файл
Доброго времени суток. Написал небольшую программку, в которой есть пару картинок и музыка. Как мне.
Упаковать exe и dll в один exe файл
Добрый день! Для защиты использую IlProtector. На выходе получается exe и 2 dll. Я хочу.
Компиляция в один exe-файл.
Добрый день КОЛЕГИ. у меня возник хоть и глупый но всеже вопрос: при компиляции проэкта WPF.
Компиляция библиотек в один exe
Всем привет, очень нужна помощь, есть проект на гитхабе https://github.com/xmrig/xmrig-nvidia.
Tupik1111,
Да, можно. Зависимую библиотеку можно встроить в ресурсы и подгружать оттуда вручную. Предполагается, что ваша библиотека уже находится в References проекта, проект собирается, программа успешно запускается.
Для начала добавьте в проект библиотеку как ресурс:
Этот класс загрузит зависимую сборку из ресурса, как только основная программа обратится к ней, используя обработчик события AppDomain.AssemblyResolve.
В классе, где находится точка входа программы, добавьте статический конструктор и вызовите метод RegisterDependencyResolver. Для примера, пусть у вас имеется консольное приложение:
Заботиться о выгрузке сборки не надо, т.к. это все равно невозможно (можно выгрузить только домен целиком).
Пример подсмотрен в книге Дж. Рихтера «CLR via C#».
Создание приложения Windows Forms на C# в Visual Studio
В рамках этого краткого знакомства с возможностями интегрированной среды разработки Visual Studio (IDE) вы создадите простое приложение на C# с пользовательским интерфейсом на основе Windows.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
На некоторых снимках экрана в этом учебнике используется темная тема. Если вы не используете темную тему, но хотите переключиться на нее, см. страницу Персонализация интегрированной среды разработки и редактора Visual Studio.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio 2022, если еще не сделали этого.
Создание проекта
Сначала вы создадите проект приложения на C#. Для этого типа проекта уже имеются все нужные файлы шаблонов, что избавляет вас от лишней работы.
Откройте Visual Studio 2017.
В верхней строке меню последовательно выберите Файл > Создать > Проект.
Запустите Visual Studio.
На начальном экране выберите Создать проект.
В окне Создать проект выберите шаблон Приложение Windows Forms (.NET Framework) для C#.
(При желании вы можете уточнить условия поиска, чтобы быстро перейти к нужному шаблону. Например, введите Приложение Windows Forms в поле поиска. Затем выберите C# в списке языков и Windows в списке платформ.)
Если шаблон Приложение Windows Forms (.NET Framework) отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов.
Затем нажмите кнопку Изменить в Visual Studio Installer. Вам может быть предложено сохранить результаты работы; в таком случае сделайте это. Выберите Продолжить, чтобы установить рабочую нагрузку. После этого вернитесь к шагу 2 в процедуре Создание проекта.
В поле Имя проекта окна Настроить новый проект введите HelloWorld. Затем нажмите Создать.
Новый проект открывается в Visual Studio.
Запустите Visual Studio.
В окне запуска выберите Создание нового проекта.
В окне Создание проекта выберите шаблон Приложение Windows Forms (.NET Framework) для C#.
(При желании вы можете уточнить условия поиска, чтобы быстро перейти к нужному шаблону. Например, введите Приложение Windows Forms в поле поиска. Затем выберите C# в списке языков и Windows в списке платформ.)
Если шаблон Приложение Windows Forms (.NET Framework) отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов.
Затем нажмите кнопку Изменить в Visual Studio Installer. Вам может быть предложено сохранить результаты работы; в таком случае сделайте это. Выберите Продолжить, чтобы установить рабочую нагрузку. После этого вернитесь к шагу 2 в процедуре Создание проекта.
В поле Имя проекта окна Настроить новый проект введите HelloWorld. Затем выберите Создать.
Новый проект открывается в Visual Studio.
Создание приложения
Когда вы выберете шаблон проекта C# и зададите имя файла, Visual Studio открывает форму. Форма является пользовательским интерфейсом Windows. Мы создадим приложение Hello World, добавив элементы управления на форму, а затем запустим его.
Добавление кнопки на форму
Выберите Панель элементов, чтобы открыть всплывающее окно «Панель элементов».
(Если параметр для всплывающего окна Панель элементов отсутствует, его можно открыть в строке меню. Для этого выберите Вид > Панель элементов. Либо нажмите клавиши CTRL+ALT+X.)
Выберите значок Закрепить, чтобы закрепить окно Панель элементов.
Выберите элемент управления Кнопка и перетащите его на форму.
В окне Свойства найдите Текст, измените имя с button1 на Click this и нажмите клавишу ВВОД.
(Если окно Свойства не отображается, его можно открыть в строке меню.) Для этого выберите Вид > Окно свойств. Или нажмите клавишу F4.)
В разделе Конструктор окна Свойства измените имя с button1 на btnClickThis и нажмите клавишу ВВОД.
Если список в окне Свойства был упорядочен по алфавиту, button1 появится в разделе Привязки данных.
Добавление метки на форму
Теперь, когда мы добавили элемент управления »Кнопка» для создания действия, давайте добавим элемент управления «Метка», куда можно отправлять текст.
Выберите элемент управления Метка в окне Панель элементов, а затем перетащите его на форму и расположите под кнопкой Нажмите это.
В разделе Конструктор или Привязки данных окна Свойства измените имя label1 на lblHelloWorld и нажмите клавишу ВВОД.
Добавление кода на форму
В окне Form1.cs [Проект] дважды щелкните кнопку Нажмите это, чтобы открыть окно Form1.cs.
(Кроме того, можно развернуть узел Form1.cs в обозревателе решений, а затем выбрать Form1.)
Запуск приложения
Нажмите кнопку Запустить, чтобы запустить приложение.
Будет выполнено несколько операций. В интегрированной среде разработки Visual Studio откроются окна Средства диагностики и Вывод. Кроме того, вне этой среды откроется диалоговое окно Form1. Оно будет содержать вашу кнопку Нажмите это и текст label1.
Закройте диалоговое окно Form1, чтобы завершить работу приложения.
Создание приложения
Когда вы выберете шаблон проекта C# и зададите имя файла, Visual Studio открывает форму. Форма является пользовательским интерфейсом Windows. Мы создадим приложение Hello World, добавив элементы управления на форму, а затем запустим его.
Добавление кнопки на форму
Щелкните Панель элементов, чтобы открыть всплывающее окно «Панель элементов».
(Если параметр для всплывающего окна Панель элементов отсутствует, его можно открыть в строке меню. Для этого выберите Вид > Панель элементов. Либо нажмите клавиши CTRL+ALT+X.)
Щелкните значок Закрепить, чтобы закрепить окно Панель элементов.
Выберите элемент управления Кнопка и перетащите его на форму.
(Если окно Свойства не отображается, его можно открыть в строке меню.) Для этого выберите Вид > Окно свойств. Или нажмите клавишу F4.)
Добавление метки на форму
Теперь, когда мы добавили элемент управления »Кнопка» для создания действия, давайте добавим элемент управления «Метка», куда можно отправлять текст.
Выберите элемент управления Метка в окне Панель элементов, а затем перетащите его на форму и расположите под кнопкой Нажмите это.
В разделе Проект или (DataBindings) окна Свойства измените имя Label1 на lblHelloWorld и нажмите клавишу ВВОД.
Добавление кода на форму
В окне Form1.cs [Проект] дважды щелкните кнопку Нажмите это, чтобы открыть окно Form1.cs.
(Кроме того, можно развернуть узел Form1.cs в обозревателе решений, а затем выбрать Form1.)
Запуск приложения
Нажмите кнопку Запустить, чтобы запустить приложение.
Будет выполнено несколько операций. В интегрированной среде разработки Visual Studio откроются окна Средства диагностики и Вывод. Кроме того, вне этой среды откроется диалоговое окно Form1. Оно будет содержать вашу кнопку Нажмите это и текст Label1.
Закройте диалоговое окно Form1, чтобы завершить работу приложения.
Следующие шаги
Для получения дополнительных сведений перейдите к следующему руководству: