Как включить clr в visual studio
Для этой процедуры можно ввести собственную программу на языке C++ или использовать один из примеров программ. Пример программы, используемый в этой процедуре, создает текстовый файл textfile.txt и сохраняет его в каталог проекта.
Предварительные требования
- Для работы необходимо владеть основами языка C++.
- в Visual Studio 2017 и более поздних версий поддержка C++/cli является дополнительным компонентом. чтобы установить его, откройте Visual Studio Installer из Windows меню. Убедитесь, что установлен флажок Разработка классических приложений на C++ , и в разделе Дополнительные компоненты также следует проверить поддержку C++/CLI.
Создание проекта
Приведенные ниже инструкции немного отличаются в зависимости от используемой версии Visual Studio. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
создание проекта C++/cli в Visual Studio 2019
в обозреватель решений щелкните правой кнопкой мыши вверху, чтобы открыть диалоговое окно создание нового Project .
в верхней части диалогового окна введите clr в поле поиска, а затем выберите clr Empty Project из списка результатов.
создание проекта C++/cli в Visual Studio 2017
Создайте новый проект. В меню Файл укажите Создать, затем нажмите Проект.
Введите имя проекта. По умолчанию содержащее проект решение имеет то же имя, что и новый проект, но можно ввести другое имя. При необходимости можно ввести другое расположение для проекта.
создание проекта C++/cli в Visual Studio 2015
Создайте новый проект. В меню Файл укажите Создать, затем нажмите Проект.
Введите имя проекта. По умолчанию содержащее проект решение имеет то же имя, что и новый проект, но можно ввести другое имя. При необходимости можно ввести другое расположение для проекта.
Добавить исходный файл
Если обозреватель решений не отображается, в меню Вид выберите пунукт Обозреватель решений.
Добавьте новый исходный файл в проект:
Щелкните правой кнопкой мыши папку исходные файлы в Обозреватель решений, наведите указатель на пункт добавить и выберите пункт новый элемент.
Щелкните элемент Файл C++ (.cpp), введите имя файла и нажмите кнопу Добавить.
Щелкните только что созданную вкладку в Visual Studio и введите допустимую программу Visual C++ или скопируйте и вставьте один из примеров.
Например, можно использовать пример Практическое руководство. Запись данных в текстовый файл (C++/CLI) (в узле File Handling and I/O (Работа с файлами и операции ввода-вывода) руководства по программированию).
StreamWriter^ sw = gcnew StreamWriter(fileName);
Дополнительные сведения о синтаксисе C++/CLI см. в разделе расширения компонентов для платформ среды выполнения.
В меню Сборка выберите Собрать решение.
Если внести изменения и запустить программу, не выполняя сборку, диалоговое окно может сообщить, что проект устарел. Установите флажок в этом диалоговом окне, прежде чем нажимать кнопку ОК, если вы хотите, чтобы Visual Studio всегда использовала актуальные версии файлов вместо того, чтобы выводить запрос при каждой сборке приложения.
В меню Отладка выберите команду Запуск без отладки.
Если использовался пример программы, при выполнении программы отображается командное окно, указывающее, что текстовый файл был создан.
Теперь текстовый файл textfile.txt находится в каталоге проекта. Этот файл можно открыть с помощью Блокнота.
При выборе пустого шаблона проекта CLR автоматически задается параметр компилятора /clr. Чтобы проверить это, щелкните правой кнопкой мыши проект в обозревателе решений и выберите Свойства, а затем установите флажок Поддержка общеязыковой среды выполнения (CLR) в узле Общие окна Свойства конфигурации.
См. также
Справочник по языку C++
Проекты и системы сборки
Поскольку мне всё равно пришлось ставить Visual Studio для того, чтобы установить Windows Kits для работы с WinAPI, то я решил не использовать MingW, а доустановить C++ build tools и использовать их для компиляции. В этом случае придётся переделать задачи (tasks) и настройки VSCode.
Хорошее описание нашёл здесь, его и буду использовать в данной заметке.
Нам потребуется
1. Естественно нам потребуется сама программа VSCode.
2. В Visual Studio должен быть установлен компонент Desktop development with C++:
Чтобы проверить успешную установку, достаточно вызвать Developer Command Prompt for VS 2019 (файл VsDevCmd.bat) из Пуска. Там нужно запустить файл cl.exe. Вывод консоли должен быть без ошибок:
3. Для VSCode должно быть установлено дополнение (расширение) Microsoft C/C++
Настройка
4. В Проводнике открываем рабочую папку проекта и, удерживая Shift , нажимаем правую кнопку мыши, после чего выбираем
5. В открывшемся окошке PowerShell запускаем VSCode, для этого нужно набрать code . и нажать Enter :
PS C:UsersDenissourcereposSampleVSCode> code .
6. В запущенном редакторе создадим новый файл:
7. Это просто тест, поэтому код будет простейшим:
8. Сохраним файл под именем main.cpp:
Шаги 9-11 скорее всего не нужны. В статье они есть, но без них у меня всё тоже прекрасно компилируется.
9. Открываем палитру команд с помощью комбинации клавиш Ctrl+Shift+P
10. Список большой, поэтому проще ввести часть слова и выбрать нужную команду из списка:
11. В конфигурации необходимо проверить, а, при необходимости, установить путь для компилятора:
C:/Program Files (x86)/Microsoft Visual Studio/2019//VC/Tools/MSVC/14.28.29910/bin/Hostx64/x64/cl.exe
12. Внесём изменения в файл settings.json:
У меня глобальный файл настроек, а не только для проекта, поэтому я добавляю строчки в начало файла C:UsersDenisAppDataRoamingCodeUsersettings.json
13. Ранее я уже создавал файл Задач tasks.json, поэтому сейчас я добавлю к нему новые строчки:
14. Чтобы у нас была возможность запустить проект на отладку, можно использовать файл launch.json. Но я не хочу создавать такой файл для каждого проекта каждый раз, поэтому сделаю глобальную конфигурацию. Для этого я добавлю строчки в файл settings.json:
Благодаря этому, при нажатии F5 , проект будет откомпилирован, а потом запущен сразу после этого. Просто запустить, без отладки, можно комбинацией Ctrl+F5
Ускоряем Visual Studio, часть II. Эксперименты с компиляцией
Сразу скажу, что в финале мне удалось добиться сокращения времени компиляции решения с 4:24 минут до менее чем одной минуты. Детали под катом.
На старт!
Набор экспериментов составлен по советом с сайтов Stackoverfow, RSDN, форумов MSDN, выдачи Google ну и просто из головы.
Объектом тестирования станет время полной компиляции решения. Перед каждым экспериментом вся папка проекта будет удаляться, код будет заново заливаться из репозитория, а Visual Studio перезагружаться. Каждый эксперимент будет повторяться трижды, результатом будет среднее время. После каждого эксперимента сделанные изменения откатываются.
Если кому-нибудь интересна аппаратная конфигурация моего компьютера, так вот она:
+ жесткий диск WD 500 Гб, 7200 RPM, 16 Мб кэш
+ Win 7 Профессиональная 32 бита со всеми возможными обновлениями
+ Visual Studio 2010 Professional с первым сервис-паком
В Windows включен режим максимальной производительности, отключен Aero и всякие анимации.
Исходное время компиляции моего решения: 4 минуты 24 секунды
Поехали!
Есть мнение, что самые медленные операции во время компиляции решения связаны с доступом к диску. Уменьшить это время можно путем использования RamDrive для временных файлов.
Результат: 4 минуты 13 секунд или -4.17% ко времени компиляции.
Вывод: прирост производительности имеется, хоть и небольшой. Если количество ОЗУ позволяет, этот совет можно применять в деле.
Коль уж нам удалось немного ускорить компиляцию за счет выноса на RamDrive временных файлов, возможно получиться добиться еще лучших результатов, переместив туда всё решение (всё-таки более 4000 файлов).
Результат: 3 минуты 47 секунд или -14.02% ко времени компиляции.
Продолжая рассуждения о скорости поиска файлов на диске и более производительных операциях случайного доступа для USB-носителей, попробуем поместить весь проект на флешку и скомпилировать его там.
Результат: 20 минут и 5 секунд или +356.44% ко времени компиляции
Включение функции ReadyBoost в Windows
Microsoft расхваливает эту функцию именно за повышение производительности при работе с большим количеством относительно небольших блоков данных (наш вариант). Попробуем.
Результат: 4 минуты 17 секунд или -2.65% ко времени компиляции.
Вывод: вполне нормальный способ ускорения работы. Кроме необходимости 1 раз вставить флешку и настроить ReadyBoost других недостатков не имеет, а некоторый прирост производительности даёт.
Изменение количества одновременно компилирующихся проектов
Visual Studio при установке прописывает это число равным общему количеству ядер процессоров в Вашем ПК. Тем не менее, мы можем попробовать его изменить (делается это в настройках VS для С++ проектов) и оценить изменение производительности. Так как в моём компьютере 4-ядерный процессор, изначально это число было равным четырём.
Отключение вывода текста билда в окно Оutput
Результат: 4 минуты 22 секунды или -0.76% ко времени компиляции
Вывод: прирост столь смехотворен, что не стоит даже комментариев. Он может быть как реальным, так и случайным.
Очистка корзины
Результат: 4 минуты 23 секунды или +0.38% ко времени компиляции.
Вывод: время компиляции осталось без изменений. Теория провалилась.
Ключ компилятора /MP
Результат: 2 минуты 38 секунд или -40.15% ко времени компиляции
Удаление папки решения из индекса поиска Windows
Есть мнение, что изменение файлов в папках, которые индексируются механизмом поиска ОС Windows, приводит к увеличению времени компиляции.
Результат: 4 минуты 24 секунды или никакого изменения во времени компиляции
Вывод: то ли индексирование в Windows сделано так хорошо, что вообще не замедляет работу других программ с диском, то ли это влияние минимально, то ли мне просто повезло и компиляция не совпала по времени с индексацией.
Unity Builds
Об этом механизме я рассказывал в прошлой статье.
Результат: 3 минуты 24 секунды или -22.73% ко времени компиляции.
Вывод: сокращение времени компиляции существенно. О всех достоинства и недостатках этой методики я уже писал, использовать его или нет Вы можете решить сами.
Завершение лишних программ
Работающие параллельно со Студией программы кушают память и ресурсы процессора. Их закрытие может положительно сказаться на скорости работы Студии. Итак, я закрываю Skype, QIP, Dropbox, GTalk, DownloadMaster, Mysql server.
Результат: 4 минуты 15 секунд или -3.41% ко времени компиляции
Вывод: во время компиляции придется обойтись без других программ. Никаких анекдотов и порнухи «пока оно там компилится». Вряд ли полный отказ от всех программ возможен для разработчика, но можно создать бат-файлы, включающиевыключащие все лишнее и иногда ими пользоваться.
Отключение антивируса
Если у Вас в системе установлен антивирус, то эта
полезная программа постоянно проверяет все файловые операции. Таким образом, каждый участвующей в компиляции файл будет удостоен внимательного взгляда бдительного стража, что может замедлить время компиляции. Я, честно говоря, не был уверен, как настроить мой антивирус так, чтобы быть уверенным в полном игнорировании им моего проекта и попросту его удалил. Ваш антивирус, возможно, конфигурируется нужным образом.
Результат: 3 минуты 32 секунды или -19.07% ко времени компиляции
Дефрагментация жесткого диска
Результат: 4 минуты 8 секунд или -6.06% ко времени компиляции
Вывод: практика согласуется с теорией. Поставьте себе дефрагментацию в планировщик и почаще.
Способы, которые, вероятно, помогли бы, но попробовать не вышло
Переход на 64-битную версию Windows
Есть предположение, что это дало бы некоторый прирост производительности, но портирование нашего проекта под x64, в силу его специфики, имеет не очень высокий приоритет и пока не реализовано. Соответственно, пока что нечего и тестировать.
Обновление процессора, памяти, замена HDD на SSD или RAID
Нужно сказать, что моя тестовая машинка не так уж плоха и до планового апгрейда еще далеко. Работаем с тем, что есть. По отзывам в интернете наибольшее влияние на время компиляции оказывает установка SSD.
Вынесение редко меняющихся проектов в отдельное решение
разной полезной информации по теме.
Это всё, что я хотел рассказать о способах ускорения компиляции решений в Visual Studio, а в следующей статье я приведу несколько советов по ускорению работы самой IDE.
Известные проблемы при компиляции проектов библиотек с помощью/CLR
Visual Studio содержит некоторые известные проблемы при компиляции проектов библиотек с помощью /clr:
Код может запрашивать типы во время выполнения с помощью крунтимекласс:: фромнаме. Однако если тип находится в .dllе MSIL (скомпилированном с /CLR), вызов FromName может завершиться ошибкой, если он происходит перед тем, как статические конструкторы будут выполняться в управляемом .dll (эта проблема не возникает, если вызов фромнаме происходит после выполнения кода в управляемом .dll). Чтобы обойти эту проблему, можно принудительно построить управляемый статический конструктор, определив функцию в управляемом .dll, экспортировав ее и вызывая из собственного приложения MFC. Пример:
Компиляция с помощью Visual C++
прежде чем использовать /clr для любого модуля в проекте, сначала скомпилируйте и свяжите собственный проект с Visual Studio 2010.
Следующие шаги следуют по порядку, чтобы предоставить самый простой путь к компиляции /CLR . Важно компилировать и запускать проект после каждого из этих шагов.
версии до Visual Studio 2003
при обновлении до Visual Studio 2010 с версии, выпущенной до Visual Studio 2003, могут появиться ошибки компилятора, связанные с расширенным стандартом соответствия C++ в Visual Studio 2003
обновление с Visual Studio 2003
проекты, созданные ранее с помощью Visual Studio 2003, также должны быть предварительно скомпилированы без /clr , так как Visual Studio теперь повысили соответствие стандарту ANSI/ISO и некоторые критические изменения. Изменение, которое, скорее всего, потребует больше внимания, — функции безопасности в CRT. Код, использующий CRT, скорее всего, создает предупреждения об устаревании. Эти предупреждения можно подавлять, но переход на новые версии функций CRT с повышенной безопасностью является предпочтительным, так как они обеспечивают лучшую безопасность и могут обнаружить проблемы безопасности в коде.
обновление с управляемые расширения для C++
начиная с Visual Studio 2005, код, написанный с управляемые расширения для C++, не будет компилироваться в /clr.
Преобразование кода C в C++
несмотря на то, что Visual Studio будет компилировать файлы C, необходимо преобразовать их в C++ для компиляции /clr . Реальное имя файла изменять не нужно; можно использовать параметр /TP (см. раздел /TC,/TP,/TC,/TP (укажите тип исходного файла).) Обратите внимание, что хотя файлы исходного кода C++ необходимы для /CLR, нет необходимости рефакторинга кода для использования объектно-ориентированных парадигм.
В коде C, скорее всего, потребуется внести изменения при компиляции в виде файла C++. Правила безопасности типов C++ строгие, поэтому преобразования типов должны быть сделаны явными с приведением. Например, функция malloc возвращает указатель void, но может быть назначен указателю на любой тип в C с приведением:
Указатели функций также строго типизированы в C++, поэтому следующий код на языке C требует изменения. В C++ лучше создать объект typedef , который определяет тип указателя функции, а затем использовать этот тип для приведения указателей функций:
Кроме того, C++ требует, чтобы функции либо были созданы прототипом, либо были полностью определены до того, как на них можно будет ссылаться или вызывать.
Идентификаторы, используемые в коде C, которые должны быть ключевыми словами в C++ (например. virtual new delete bool true false и т. д.), необходимо переименовать. Обычно это можно сделать с помощью простых операций поиска и замены.
перенастроить Project Параметры
после компиляции и запуска проекта в Visual Studio 2010 следует создать новые конфигурации проекта для /clr , а не изменять конфигурации по умолчанию. параметр/CLR несовместим с некоторыми параметрами компилятора, и создание отдельных конфигураций позволяет построить проект как машинный или управляемый. Если в диалоговом окне страницы свойств выбран параметр/CLR , то параметры проекта, несовместимые с /CLR , отключены (и отключенные параметры не восстанавливаются автоматически, если параметр/CLR впоследствии не выбран).
создание новых конфигураций Project
можно использовать параметр копировать Параметры из в диалоговом окне создание конфигурации Project (сборка > Configuration Manager > активная конфигурация решения > создать), чтобы создать конфигурацию проекта на основе существующих параметров проекта. Сделайте это один раз для конфигурации отладки и для конфигурации выпуска. Последующие изменения можно применять только к конфигурациям /CLR , при этом исходные конфигурации проекта остаются без изменений.
Для проектов, использующих настраиваемые правила сборки, может потребоваться дополнительное внимание.
Этот шаг имеет различные последствия для проектов, использующих файлы Makefile. В этом случае можно настроить отдельную сборку-цель или создать версию, относящуюся к компиляции с параметром/CLR , из копии исходного файла.
изменение Project Параметры
параметр/CLR можно выбрать в среде разработки, следуя инструкциям в разделе /CLR (компиляция общеязыковой среды выполнения). Как упоминалось ранее, этот шаг автоматически отключает конфликтующие параметры проекта.
при обновлении управляемой библиотеки или проекта веб-службы с Visual Studio 2003 параметр компилятора /zl будет добавлен на страницу свойств командная строка . Это вызовет ошибку LNK2001. Чтобы устранить проблему, удалите параметр /Zl со страницы свойств командной строки . Дополнительные сведения см. в разделе /Zl (опустить имя библиотеки по умолчанию) и Задайте свойства компилятора и сборки . Или добавьте msvcrt. lib и msvcmrt. lib в свойство Дополнительные зависимости компоновщика.
Для проектов, созданных с помощью файлов makefile, несовместимые параметры компилятора должны быть отключены вручную после добавления /CLR . Сведения о параметрах компилятора, несовместимых с /CLR, см. в разделе ограничения//CLR .
Предкомпилированные заголовочные файлы
В параметре/CLR поддерживаются предкомпилированные заголовки. Однако если скомпилировать только некоторые файлы CPP с параметром /CLR (компиляция остальных файлов как машинного), некоторые изменения будут необходимы, так как предкомпилированные заголовки, созданные с помощью /CLR , несовместимы с параметрами, созданными без /CLR. Такая несовместимость обусловлена тем, что /CLR создает и требует метаданных. Поэтому модули, скомпилированные с помощью /CLR , не могут использовать предкомпилированные заголовки, которые не включают метаданные, а модули без /CLR не могут использовать файлы предкомпилированных заголовков, которые содержат метаданные.
Самый простой способ скомпилировать проект, в котором скомпилированы некоторые модули, — это полностью отключить предкомпилированные заголовки. (В диалоговом окне страницы свойств проекта откройте узел C/C++ и выберите предварительно скомпилированные заголовки. Затем измените значение свойства создать или использовать предварительно скомпилированные заголовки на «не использовать предкомпилированные заголовки».)
Однако, особенно для больших проектов, предкомпилированные заголовки обеспечивают гораздо более высокую скорость компиляции, поэтому отключение этой функции нежелательно. В этом случае лучше настроить файлы /CLR и не /CLR для использования отдельных предкомпилированных заголовков. Это можно сделать за один шаг, выбрав несколько модулей для компиляции /CLR с помощью Обозреватель решений, щелкнув группу правой кнопкой мыши и выбрав пункт Свойства. Затем измените оба свойства файла заголовка создать/использовать PCH-файл и предкомпилированный файл заголовка, чтобы использовать другое имя заголовочного файла и PCH-файл соответственно.
Устранение ошибок
Компиляция с параметром /CLR может привести к ошибкам компилятора, компоновщика или среды выполнения. В этом разделе обсуждаются наиболее распространенные проблемы.
Слияние метаданных
Различные версии типов данных могут привести к сбою компоновщика из-за того, что метаданные, созданные для двух типов, не совпадают. (Обычно это происходит, когда члены типа определяются условно, но условия не одинаковы для всех CPP-файлов, использующих этот тип.) В этом случае компоновщик завершается ошибкой, сообщая только имя символа и имя второго OBJ-файла, в котором был определен тип. Часто бывает полезно повернуть порядок, в котором OBJ-файлы отправляются компоновщику для обнаружения расположения другой версии типа данных.
Взаимоблокировка загрузчика
Может произойти блокировка блокировки загрузчика, но она детерминирована и обнаружена и сообщается во время выполнения. Подробные сведения, рекомендации и решения см. в разделе Инициализация смешанных сборок .
Экспорт данных
Видимость типов
Собственные типы являются частными по умолчанию. Это может привести к тому, что собственный тип не будет виден за пределами библиотеки DLL. Устраните эту ошибку, добавив public к этим типам.
Проблемы с плавающей запятой и выравниванием
__controlfp не поддерживается в среде CLR (Дополнительные сведения см. в разделе _control87, _controlfp, _ _control87_2 ). CLR также не учитывает согласованность.
Инициализация COM
Среда CLR автоматически инициализирует COM при инициализации модуля (когда инициализация COM выполняется автоматически, как и MTA). В результате явная инициализация COM дает коды возврата, указывающие, что COM уже инициализирован. Попытка явно инициализировать модель COM с одной потоковой моделью, когда среда CLR уже инициализировала COM в другую потоковую модель, может привести к сбою приложения.
Среда CLR по умолчанию запускает COM как MTA; чтобы изменить этот параметр, используйте /CLRTHREADATTRIBUTE (задать атрибут потока CLR) .
Проблемы с производительностью
Производительность может быть снижена, когда собственные методы C++, созданные в MSIL, вызываются косвенно (вызовы виртуальных функций или использование указателей функций). Дополнительные сведения см. в разделе Двойное преобразователь.
При переходе от Native к MSIL вы заметите увеличение размера рабочего множества. Это обусловлено тем, что среда CLR предоставляет множество функций, обеспечивающих правильную работу программ. Если приложение /CLR выполняется неправильно, может потребоваться включить C4793 (отключено по умолчанию). Дополнительные сведения см. в разделе Предупреждение компилятора (уровень 1 и 3) C4793 .
Сбой программы при завершении работы
В некоторых случаях среда CLR может завершить работу до завершения выполнения управляемого кода. std::set_terminate SIGTERM Это может быть вызвано использованием и. Дополнительные сведения см. в разделе сигнальные константы и set_terminate .
Использование новых функций Visual C++
Шаг 0. А вдруг получится сразу?
В настоящее время IDE, поддерживающих Windows forms, не так много — буквально одна только Visual Studio, более известная как просто "студия". Поэтому будем рассматривать создание и решение проблем именно в этой среде разработки. Первым шагом запустим студию, начнём создавать новый проект и попытаемся найти Windows forms проект для C++:
Если у вас более старая версия Visual Studio, то интерфейс будет выглядеть немного иначе, однако данная функциональность будет той же. Также не исключено, что у Вас может быть данный тип проекта для C++ (на некоторых версиях формы для C++ были доступны сразу после установки IDE). Если же у Вас, как и у нас поиск не дал нужных результатов, то переходим к следующему шагу.
Шаг 1. Создание CLR проекта
Поскольку непосредственно Windows Forms проекта у нас не оказалось, мы обхитрим студию и создадим пустой CLR проект на С++. Для этого в том же окне поиска необходимо найти и выбрать Новый CLR проект , ввести имя (если нужно, то поменять директорию расположения проекта) и немного подождать, пока студия сделает свою работу.
В результате Visual Stido создаст новый C++ CLR проект, который будет выглядеть примерно так:
Шаг 2. Добавить форму
Чтобы сделать CLR проект проектом Windows Forms, нужно просто добавить в него форму. Для этого в верхнем меню нужно выбрать Проект - Добавить новый элемент и в появившемся окне выбрать категорию Visual C++ - UI и затем выбрать Форма Windows Forms .
После данной операции нас ждёт разочарование в виде ошибки Исключение из HRESULT: 0x8000000A :
Шаг 3. Исправляем появившуюся ошибку
Данная ошибка появляется из-за того, что для создания окна формы приложению необходима основная программа, создающая форму и переключающая управление на неё, однако после добавления новой формы файл Form1.cpp предсказуемо создаётся пустым. Поэтому необходимо добавить основную программу в файл с формой:
В результате код файла Form1.cpp будет выглядеть следующим образом:
Шаг 4. Переоткрыть проект
Всё, что теперь осталось сделать — это закрыть текущее решение, а затем открыть его снова. Для этого можно закрыть саму студию, а можно выбрать в верхнем меню Файл - Закрыть решение , после чего в появившемся окне выбрать только что созданный проект и открыть его заново.
Благодаря добавленному коду основной программы, студия сможет создать форму и на экране появится изображение формы, на которую можно будет добавлять компоненты, задавать их свойства, а также свойства самой формы.
Выпускник МГУ им. М.В. Ломоносова
Programforyou — это сообщество, в котором Вы можете подтянуть свои знания по программированию, узнать, как эффективно решать те или иные задачи, а также воспользоваться нашими онлайн сервисами.
БлогNot. Visual Studio 2013 и выше: как сделать приложение Windows Forms?
Visual Studio 2013 и выше: как сделать приложение Windows Forms?
Ну да, такого "мастера приложений с одной главной формой", как в версии 2010, нет. Но это не значит, что работа с формами не поддерживается - просто создавайте пустой проект CLR и добавляйте форму в него "вручную". Вот весь процесс, расписанный по шагам:
Меню Создать проект, Visual C++, CLR, Пустой проект CLR. После создания проекта нажать на вкладку Проект, Добавить новый элемент, UI, форма Windows Form. Потом добавить следующий код в файл MyForm.cpp :
Далее нажимаем вкладку Проект, Свойства имя_текущего_проекта.
Выбираем Свойства конфигурации, Компоновщик, Система, справа в поле Подсистема вставляем Windows (строку /SUBSYSTEM:WINDOWS ).
Затем Свойства конфигурации, Компоновщик, Дополнительно, справа поле Точка входа, вставляем строку main
Приведённый вариант кода MyForm.cpp - не единственный, в новых версиях Studio лучше делать так:
Это всё, можно работать.
Для экспорта шаблона делаем следующее: из меню "Файл" выбираем пункт "Экспорт шаблона". В появившимся мастере шаблонов соглашаемся со всем, только проверяем, чтобы стояла галочка на "Автоматический импорт шаблонов в Visual Studio". Жмем Готово. Теперь в мастере проектов появился новый пункт.
P.S. Проверил в Visual Studio 2015, подход также сработал. Увы, экспорт шаблона в некоторых сборках версий Studio 2015 и 2017 может работать криво, не добавляя в шаблон файлы .cpp и .h!
P.P.S. В Visual Studio 2019 действия те же, но если после установки Visual Studio 2019 отсутствует конструктор формы Windows Forms, читаем и ставим это.
Если устанавливается актуальная сборка версии Enterprice (16.5.X и старше), установить рабочую нагрузку «Разработка классических приложений» и из раздела «Дополнительные компоненты» отметить «Поддержка C++/CLI» (C++/CLI Support)
Цитируем официальную доку:
"В Visual Studio 2017 и более поздних версиях поддержка C++/CLI является необязательным компонентом. Чтобы установить его, откройте Visual Studio Installer из меню "Пуск" Windows. Убедитесь, что установлен флажок Разработка классических приложений на C++, и в разделе Дополнительные компоненты также следует проверить поддержку C++/CLI.
"Individual Components" (Индивидуальные компоненты) - "Поддержка C++/CLI" ("C++/CLI support")"
Возможно, без обновления версии поможет вот это дополнение.
В версии Studio 2019 примерно со сборки 16.5 (см. меню Справка - О программе) отдельно "доставлять" конструктор форм не нужно, создаваемый тип проекта называется "Пустой проект CLR (.NET Framework)", а сохранить шаблон можно из меню Проект - Экспорт шаблона. В принципе, для работы с C++ и Windows Forms нужны только следующие нагрузки:
Рабочие нагрузки VS 2019 CPP
Читайте также: