Как скомпилировать файл cpp в Visual Studio?
Создал проект в visual studio (консольное приложение windows), поработал, через время открыл и вместо кнопки «Локальный отладчик windows» — «Присоединение». Как создавать проекты так, чтобы вот такого не было? И почему так произошло, если не трудно, тоже объясните пожалуйста.
- Вопрос задан более трёх лет назад
- 206 просмотров
Комментировать
Решения вопроса 1

olkhovichs @olkhovichs
Скорее всего, потому что вы открыли отдельный файл .cpp, а нужно открыть решение проекта с расширением .sln.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Компилятор csc.exe

В действительности необходимость в создании крупных приложений с использованием одного лишь компилятора командной строки C# может никогда не возникнуть, тем не менее, важно понимать в общем, как вручную компилировать файлы кода. Существует несколько причин, по которым освоение этого процесса может оказаться полезным:
- Самой очевидной причиной является отсутствие Visual Studio 2010 или какой-то другой графической IDE-среды.
- Работа может выполняться в университете, где использование инструментов для генерации кода и IDE-сред обычно запрещено.
- Планируется применение автоматизированных средств разработки, таких как msbuild.exe, которые требуют знать опции командной строки для используемых инструментов.
- Возникло желание углубить свои познания в C#. В графических IDE-средах в конечном итоге все заканчивается предоставлением компилятору csc.ехе инструкций относительно того, что следует делать с входными файлами кода C#. В этом отношении изучение происходящего «за кулисами» позволяет получить необходимые знания.
Еще одно преимущество подхода с использованием одного лишь компилятора csc.ехе состоит в том, что он позволяет обрести навыки и чувствовать себя более уверенно при работе с другими инструментами командной строки, входящими в состав .NET Framework 4.0 SDK, так как целый ряд важных утилит работает исключительно в режиме командной строки.
Чтобы посмотреть, как создавать .NET-приложение без IDE-среды, давайте построим с помощью компилятора C# и текстового редактора Notepad простую исполняемую сборку по имени TestApplication.exe. Сначала необходимо подготовить исходный код. Откройте программу Notepad (Блокнот), выбрав в меню Start (Пуск) пункт All Programs — Accessories — Notepad (Все программы — Стандартные — Блокнот), и введите следующее типичное определение класса на C#:
using System; class TestApplication < static void Main() < Console.WriteLine("Привет!"); Console.ReadLine(); >>
После окончания ввода сохраните файл под именем 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) и введите следующую команду:

Обратите внимание, что здесь 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 и измените его следующим образом:
using System; using System.Windows.Forms; class TestApplication < static void Main() < Console.WriteLine("Привет!"); MessageBox.Show("Привет. "); >>
Далее в командной строке нужно проинформировать компилятор 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:
// Класс HelloMessage using System; using System.Windows.Forms; class HelloMessage < public void Speak() < MessageBox.Show("Привет!!") ; >>
Изменим исходный класс TestApplication так, чтобы в нем использовался класс этого нового типа:
using System; class TestApplication < static void Main() < Console.WriteLine("Привет!"); HelloMessage v = new HelloMessage(); v.Speak(); >>
Чтобы скомпилировать файлы исходного кода на C# , необходимо их явно перечислить как входные файлы:

В качестве альтернативного варианта компилятор C# позволяет использовать групповой символ (*) для включения в текущую сборку всех файлов *.cs, которые содержатся в каталоге проекта:

Вывод, получаемый после запуска этой программы, идентичен предыдущей программе. Единственное отличие между этими двумя приложениями связано с разнесением логики по нескольким файлам.
Работа с ответными файлами в C#
Как не трудно догадаться, для создания сложного приложения C# из командной строки потребовалось бы вводить утомительное количество входных параметров для уведомления компилятора о том, как он должен обрабатывать исходный код. Для облегчения этой задачи в компиляторе C# поддерживается использование так называемых .
В ответных файлах C# размещаются все инструкции, которые должны использоваться в процессе компиляции текущей сборки. По соглашению эти файлы имеют расширение *.rsp (сокращение от response — ответ). Чтобы посмотреть на них в действии, давайте создадим ответный файл по имени TestApplication.rsp, содержащей следующие аргументы (комментарии в данном случае обозначаются символом #):
# Это ответный файл для примера # TestApplication.exe /r:System.Windows.Forms.dll # Параметры вывода и подлежащие компиляции файлы /target:exe /out:TestApplication.ехе *.cs
Теперь при условии сохранения данного файла в том же каталоге, где находятся подлежащие компиляции файлы исходного кода на C#, все приложение можно будет создать следующим образом (обратите внимание на применение символа @):

В случае необходимости допускается также указывать и несколько ответных *.rsp файлов в качестве входных параметров (например, csc @FirstFile.rsp @SecondFile.rsp @ThirdFile.rsp). При таком подходе, однако, следует иметь в виду, что компилятор обрабатывает параметры команд по мере их поступления. Следовательно, аргументы командной строки, содержащиеся в поступающем позже файле *.rsp, могут переопределять параметры из предыдущего ответного файла.
Последним моментом, связанным с ответными файлами, о котором необходимо упомянуть, является то, что с компилятором C# ассоциирован ответный файл csc.rsp, который используется по умолчанию и размещен в том же самом каталоге, что и файл csc.ехе (обычно это С:\Windows\Microsoft. NET\Framework\ , где на месте элемента идет номер конкретной версии платформы). Открыв файл csc.rsp в программе Notepad (Блокнот), можно увидеть, что в нем с помощью флага /r: указано множество сборок .NET, в том числе различные библиотеки для разработки веб-приложений, программирования с использованием технологии LINQ и обеспечения доступа к данным и прочие ключевые библиотеки (помимо, конечно же, самой главной библиотеки mscorlib.dll):

При создании программ на C# с применением csc.ехе ссылка на этот ответный файл добавляется автоматически, даже когда указан специальный файл *.rsp. Из-за наличия такого ответного файла по умолчанию, рассматриваемое приложение TestApplication.ехе можно скомпилировать и c помощью следующей команды (поскольку в csc.rsp уже содержится ссылка на System.Windows.Forms.dll):

Стоит отметить, что в случае добавления с помощью опции /r ссылок на сборки, которые на самом деле не используются, компилятор их проигнорирует. Поэтому беспокоиться по поводу «разбухания кода» не нужно.
Как скомпилировать приложение в visual studio
Вот скачал visual studio 2010 для C#. Не могу разобраться, как в нем скомпилировать готовый exe файл, который можно, к примеру, запустить на др. компе (сама прога).
Он почему то создает в указанной папке кучу файлов в несколько подпапок. А самого ехе я не нашел.
Подскажите, а то руководство на англ. языке (((
Участник клуба
Регистрация: 29.12.2009
Сообщений: 1,166
создать прект знаешь как? сохраняешь его куда тебе угодно, запоминаешь путь
далее, когда проект создастся, нажимаешь меню сверху Build и выбираешь там Build project
ну как то так кароч
потом идешь в папку с проектом, там будет папка Release, в ней будет твой exe
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
Форумчанин
Регистрация: 11.08.2009
Сообщений: 558
| запустить на др. компе |
Кроме всего прочего, на другом компе должен быть установлен .NET 4
Регистрация: 15.02.2010
Сообщений: 15,585
| там будет папка Release |
Или Debug. все зависит под что компилируется.
Пользователь
Регистрация: 24.09.2010
Сообщений: 62
спасибо большое
Регистрация: 21.12.2011
Сообщений: 1
Visual Studio C#
Здравствуйте, подскажите, пожалуйста, как мне скомпилировать гтовый проект? То есть он был кем-то создан, а мне надо запустить его на своем компьютере!
Заранее спасибо.
DevDotNet.ORG
Embedded Systems, IoT, .NET, Docker, Hosting, Linux
Создание первого приложения на .NET 5.0 в Visual Studio Code для ARM
Создано автором Anton 22.02.2021 в .NET

В этой публикации вы узнаете, как создать первое консольное приложение на .NET 5.0 в Visual Studio Code, затем его скомпилировать для различных платформ(ARM32, ARM64), с дальнейшем запуском на платах Banana Pi BPI-M64 и Cubietruck.
Visual Studio Code
Visual Studio Code — редактор исходного кода, разработанный Microsoft для Windows, Linux и macOS. Позиционируется как «лёгкий» редактор кода для кроссплатформенной разработки веб- и облачных приложений. Включает в себя отладчик, инструменты для работы с Git, подсветку синтаксиса, IntelliSense и средства для рефакторинга. Имеет широкие возможности для кастомизации: пользовательские темы, сочетания клавиш и файлы конфигурации. Распространяется бесплатно, разрабатывается как программное обеспечение с открытым исходным кодом, но готовые сборки распространяются под проприетарной лицензией. Многие возможности Visual Studio Code недоступны через графический интерфейс, зачастую они используются с помощью различных команд или JSON-файлы (например, пользовательские настройки).
Существуют сборки для ОС:
- Windows(64-bit,32-bit,ARM)
- Debian(64-bit,32-bit,ARM)
- Ubuntu(64-bit,32-bit,ARM)
- macOS10.10+
Загрузка Visual Studio Code доступна по ссылке.
Установка SDK .NET, Visual Studio Code и расширения поддержки C#
SDK .NET 5.0
Первым делом необходимо установить SDK .NET 5.0. Перейдем на страницу Download .NET 5.0, выберем SDK 5.0.103 => Installers => x64 (для Windows x64). Загрузим пакет и установим.
После установки откроем командную строку, кнопка «Пуск», пункт меню «Выполнить» команда CMD , укажем команду: dotnet —info
Windows x64: dotnet —info
D:\>dotnet --info Пакет SDK для .NET (отражающий любой global.json): Version: 5.0.103 Commit: 72dec52dbd Среда выполнения: OS Name: Windows OS Version: 6.1.7601 OS Platform: Windows RID: win7-x64 Base Path: C:\Program Files\dotnet\sdk\5.0.103\ Host (useful for support): Version: 5.0.3 Commit: c636bbdc8a .NET SDKs installed: 5.0.103 [C:\Program Files\dotnet\sdk] .NET runtimes installed: Microsoft.AspNetCore.All 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspN etCore.All] . Microsoft.WindowsDesktop.App 5.0.0-rc.2.20475.6 [C:\Program Files\dotnet\share d\Microsoft.WindowsDesktop.App] Microsoft.WindowsDesktop.App 5.0.0 [C:\Program Files\dotnet\shared\Microsoft.W indowsDesktop.App] Microsoft.WindowsDesktop.App 5.0.3 [C:\Program Files\dotnet\shared\Microsoft.W indowsDesktop.App] To install additional .NET runtimes or SDKs: https://aka.ms/dotnet-download
Visual Studio Code
Для загрузки Visual Studio Code перейдем на страницу загрузки и выберем нужный вариант пакета. Очень удобно использовать программы в виде .zip (VSCode-win32-x64-1.53.2.zip) архива, распаковал и запустил. После загрузки и распаковки архива в папку, запустим среду: Code.exe .

Visual Studio Code
Расширение поддержки C#
Установим расширение C# for Visual Studio Code (powered by OmniSharp). Для этого нажмем на закладке: 1. Extensions, затем 2. в поле ввода напишем название расширения C# for Visual Studio Code, выберем пункт 3. C# for Visual Studio Code (powered by OmniSharp). 4. Перейдем на страницу описание расширения и нажмем на кнопку Install.

C# for Visual Studio Code (powered by OmniSharp)
После установки можно выполнить настройку расширения:

После установки расширения закроем Visual Studio Code, необходима перезагрузка.
Создание консольного приложения
Перейдем в папку с проектам \Projects\ и запустим командную строку. В командной стоке выполним команду: dotnet new console -o СonsoleApp50 , где СonsoleApp50 — название нового проекта.

После выполнения команды будет создана папка \Projects\СonsoleApp50\, в этой папке будет расположен наш проект: папка — obj, файл программы — Program.cs и файл проекта — СonsoleApp50.csproj.
Добавление логики в консольное приложение
Просто запустить «Hello World!» на платформе ARM не интересно, поэтому добавим дополнительную логику в новое приложение. Приложение будет выводить информацию о системе в которой оно работает. Запустим Visual Studio Code и откроем папку с проектом \Projects\СonsoleApp50\.

Открытие проекта в Visual Studio Code
Далее, откроем меню Terminal => New Terminal:

Укажем команду сборки проекта: dotnet build

Затем команду для запуска приложения: dotnet run .

В функцию Main() поместим следующий код с вызовом исключения для проверки режима отладки (проект СonsoleApp50 на GitHub):
static void Main(string[] args) < Console.WriteLine("Test .NET console application!"); var str_Framework=RuntimeInformation.FrameworkDescription; var str_OSArch=RuntimeInformation.OSArchitecture.ToString(); var str_OSDesc= RuntimeInformation.OSDescription; var str_OSIdent=RuntimeInformation.RuntimeIdentifier; //output Console.WriteLine($"Версия .NET: "); Console.WriteLine($"Архитектура ОС: "); Console.WriteLine($"Версия ОС: "); Console.WriteLine($"Идентификатор ОС: "); //error Console.WriteLine("Генерировать исключение [yes/No]? "); var input_key=Console.ReadKey().Key; Console.Write("\n"); if (input_key==ConsoleKey.Y) < Console.Write("Генерация исключения"); throw new Exception("А вот и ошибочка!"); >Console.WriteLine("Завершение работы программы"); >Запустим проект, меню Run => Start Debugging.
Исключение: ошибка доступа к консоли
Приложение выдало исключение, но не то, которое было запланированно. Ошибка заключается в невозможности чтения данных с консоли. Для решение проблемы необходимо изменить в файле \Projects\СonsoleApp50\.vscode\launch.json, конфигурации запуска проекта с «console»: «internalConsole» на «console»: «integratedTerminal».
Снова запускаем проект, и переходим на закладку TERMINAL. Нажимаем «Y» и вызываем исключение.
В разделе Run => VARIABLES => Locals можно посмотреть текущее состояние переменных, так же при наведение указателя на переменную в коде, всплывает подсказка с содержанием переменной:
Отлично, отладка работает!
Компиляция приложения под разные архитектуры
Компилирование выполняется из командной строки, командой dotnet build , необходимые архитектуры задаются ключами. В .NET существуют константы для обозначения архитектуры исполнения Runtime Identifiers (RIDs). Из каталога нам потребуются идентификаторы:
- linux-arm — архитектура ARM32, для запуска приложения на Cubietruck.
- linux-arm64 — архитектура ARM64, для запуска приложения на Banana Pi BPI-M64.
Итоговый вариант команды будет выглядеть так: dotnet build -r linux-arm и dotnet build -r linux-arm64 .
Выполним компиляцию под обе платформы:

По пути \Projects\СonsoleApp50\bin\Debug\net5.0\ будут созданы две папки linux-arm и linux-arm64 для целевых платформ.
Воспользуемся бесплатным терминалом MobaXterm для копирования приложения на платы. Терминал MobaXterm — позволяет переносить целиком папку и выборочно файлы, существенно удобнее в работе по сравнению с PuTTY терминалом.
Скопируем папку linux-arm на плату Cubietruck, папку linux-arm64 на плату Banana Pi BPI-M64.
Запуск консольного приложения на Cubietruck
Для запуска .NET приложений на Cubietruck необходимо установить .NET Runtime, как это сделать в публикации — Установка .NET 5.0 для ARM на примере Banana Pi BPI-M64 и Cubietruck (Armbian, Linux). Скопируем содержимое папки \Projects\СonsoleApp50\bin\Debug\net5.0\linux-arm на Cubietruck по пути /root/linux-arm, зайдем в папку linux-arm и выполним команду: dotnet СonsoleApp50.dll .
Результат работы консольного приложения:
root@cubietruck:~/linux-arm# dotnet СonsoleApp50.dll Test .NET console application! Версия .NET: .NET 5.0.3 Архитектура ОС: Arm Версия ОС: Linux 5.10.12-sunxi #21.02.1 SMP Wed Feb 3 20:39:30 CET 2021 Идентификатор ОС: ubuntu.20.04-arm Генерировать исключение [yes/No]? n Завершение работы программыЗапуск консольного приложения на Banana Pi BPI-M64
Для запуска .NET приложений на Banana Pi BPI-M64 необходимо установить .NET Runtime, как это сделать в публикации — Установка .NET 5.0 для ARM на примере Banana Pi BPI-M64 и Cubietruck (Armbian, Linux). Скопируем содержимое папки \Projects\СonsoleApp50\bin\Debug\net5.0\linux-arm64 на Banana Pi BPI-M64 по пути /root/linux-arm64, зайдем в папку linux-arm64 и выполним команду: dotnet СonsoleApp50.dll
Результат работы консольного приложения:
root@bananapim64:~/linux-arm64# dotnet СonsoleApp50.dll Test .NET console application! Версия .NET: .NET 5.0.3 Архитектура ОС: Arm64 Версия ОС: Linux 5.8.6-sunxi64 #20.08.2 SMP Fri Sep 4 08:52:31 CEST 2020 Идентификатор ОС: ubuntu.18.04-arm64 Генерировать исключение [yes/No]? Завершение работы программыПриложения разработанные на .NET 5.0 успешно работают на архитектуре ARM32 и ARM64!
Литература
- .NET RID Catalog — .NET fundamentals
- Tutorial: Create a .NET console application using Visual Studio Code — .NET fundamentals
- .NET 5 – How to start — Michal Bialecki Blog
- Download Visual Studio Code
- dotnet build — Builds a project and all of its dependencies. — .NET fundamentals
- dotnet run — Runs source code without any explicit compile or launch commands.. — .NET fundamentals
- Visual Studio Code — Wikipedia
- C# for Visual Studio Code (powered by OmniSharp) — Visual Studio Code
- ReadKey not working in .net core — Stack Overflow
- Console (terminal) window — github.com/OmniSharp
- Проект СonsoleApp50 на GitHub
- Терминал Mobatek MobaXterm Home Edition (Free) — Download Page



