Перейти к содержимому

Как сделать проект visual studio отдельным приложением

  • автор:

Развертывание с одним файлом

Объединение всех зависящих от приложения файлов в один двоичный файл предоставляет разработчику приложения привлекательный вариант развертывания и распространения приложения в виде одного файла. Однофайловое развертывание доступно как для модели развертывания, зависящей от платформы , так и для автономных приложений.

Размер одного файла в автономном приложении велик, так как он включает в себя среду выполнения и библиотеки платформы. В .NET 6 можно опубликовать trimmed , чтобы уменьшить общий размер приложений, совместимых с обрезкой. Вариант развертывания в виде одного файла можно сочетать с параметрами публикации ReadyToRun и Обрезка.

[ВАЖНО] Чтобы запустить одно файловое приложение в Windows 7, необходимо использовать среду выполнения .NET 6.0.3 или более поздней версии.

Пример файла проекта

Ниже приведен пример файла проекта, который указывает публикацию одного файла:

  Exe net6.0 true true win-x64   

Эти свойства имеют следующие функции:

  • PublishSingleFile . Включает публикацию одного файла. Кроме того, включает предупреждения для одного файла во время dotnet build .
  • SelfContained . Определяет, является ли приложение автономным или зависящим от платформы.
  • RuntimeIdentifier . Указывает тип операционной системы и ЦП , на которые вы ориентируетесь. Также задает по true умолчанию.

Приложения с одним файлом всегда зависят от операционной системы и архитектуры. Необходимо опубликовать для каждой конфигурации, например Linux x64, Linux Arm64, Windows x64 и т. д.

Файлы конфигурации среды выполнения, такие как *.runtimeconfig.json и *.deps.json, включаются в один файл. Если требуется дополнительный файл конфигурации, его можно разместить рядом с одним файлом.

Публикация однофайловых приложений

Опубликуйте приложение с одним файлом с помощью команды dotnet publish.

    Добавьте true в файл проекта. Это изменение создает одно файловое приложение при автономной публикации. В нем также отображаются предупреждения о совместимости с одним файлом во время сборки.

 true  

Необходимо задать в файле проекта, чтобы включить анализ файлов во время сборки, но также можно передать эти параметры в качестве dotnet publish аргументов:

dotnet publish -r linux-x64 -p:PublishSingleFile=true --self-contained false 

Visual Studio создает многократно используемые профили публикации, которые управляют процессом публикации приложения.

  1. Добавьте true в файл проекта.
  2. В обозревателе решений щелкните правой кнопкой мыши проект, который нужно опубликовать. Нажмите кнопку Опубликовать. Снимок экрана: Обозреватель решений с контекстным меню с выделенным параметром Если у вас еще нет профиля публикации, следуйте инструкциям по его созданию и выберите Папка в качестве типа целевого объекта.
  3. Нажмите кнопку Изменить. Снимок экрана: профиль публикации Visual Studio с выделенной кнопкой
  4. В диалоговом окне Параметры профиля задайте следующие параметры.
    • Параметру Режим развертывания задайте значение Автономное или Зависимое от платформы.
    • В качестве значения параметра Целевая среда выполнения укажите платформу, на которую будет выполнена публикация. Должно быть чем-то, отличное от переносимого.
    • Выберите Создать отдельный файл.

Нажмите кнопку Сохранить, чтобы сохранить параметры и вернуться в диалоговое окно Публикация.

Снимок экрана: диалоговое окно параметров профиля с выделенными параметрами

В Visual Studio для Mac отсутствует возможность публикации приложения в виде одного файла. Вам потребуется опубликовать вручную, следуя инструкциям на вкладке CLI. Дополнительные сведения см. в статье Публикация приложений .NET с помощью .NET CLI.

Исключить файлы из внедрения

Некоторые файлы можно явно исключить из внедрения в один файл, задав следующие метаданные:

true 

Например, чтобы поместить некоторые файлы в каталог публикации, но не объединить их в файл, выполните следующие действия.

  PreserveNewest true   

Добавление PDB-файлов в пакет

PDB-файл для сборки можно внедрить в саму сборку ( .dll ), используя параметр, приведенный ниже. Так как символы являются частью сборки, они также являются частью приложения:

embedded 

Например, добавьте следующее свойство в файл проекта сборки, чтобы внедрить PDB-файл в эту сборку:

 embedded  

Другие замечания

Приложения с одним файлом имеют все связанные PDB-файлы вместе с приложением, а не в пакете по умолчанию. Если вы хотите включить PDB-файлы в сборку для проектов, которые вы создаете DebugType , задайте для параметра значение embedded . См . раздел Включение PDB-файлов в пакет.

Управляемые компоненты C++ не подходят для развертывания одного файла. Рекомендуется создавать приложения на C# или другом неуправляемом языке C++, чтобы обеспечить совместимость с одним файлом.

Собственные библиотеки

Только управляемые библиотеки DLL объединяются с приложением в один исполняемый файл. При запуске приложения управляемые библиотеки DLL извлекаются и загружаются в память, что позволяет избежать извлечения в папку. При таком подходе управляемые двоичные файлы внедряются в пакет с одним файлом, но собственные двоичные файлы самой основной среды выполнения являются отдельными файлами.

Чтобы внедрить эти файлы для извлечения и получить один выходной файл, задайте для свойства IncludeNativeLibrariesForSelfExtract значение true .

При указании IncludeAllContentForSelfExtract извлекаются все файлы, включая управляемые сборки, перед запуском исполняемого файла. Это может быть полезно при редких проблемах совместимости приложений.

Если используется извлечение, файлы извлекаются на диск перед запуском приложения:

  • Если для переменной DOTNET_BUNDLE_EXTRACT_BASE_DIR среды задан путь, файлы извлекаются в каталог по такому пути.
  • В противном случае при запуске в Linux или macOS файлы извлекаются в каталог в папке $HOME/.net .
  • При запуске в Windows файлы извлекаются в каталог в разделе %TEMP%/.net .

Чтобы предотвратить незаконное изменение, эти каталоги не должны быть доступны для записи пользователями или службами с разными привилегиями. Не используйте /tmp или /var/tmp в большинстве систем Linux и macOS.

В некоторых средах Linux, например в systemd , извлечение по умолчанию не работает, так как $HOME не определено. В таких случаях рекомендуется задать $DOTNET_BUNDLE_EXTRACT_BASE_DIR явно.

Для systemd рекомендуется определить DOTNET_BUNDLE_EXTRACT_BASE_DIR в файле %h/.net единиц службы значение , которое systemd правильно расширяется $HOME/.net до учетной записи, на которой выполняется служба.

[Service] Environment="DOTNET_BUNDLE_EXTRACT_BASE_DIR=%h/.net" 

Несовместимость API

Некоторые API несовместимы с развертыванием с одним файлом. Приложения могут потребовать изменения, если они используют эти API. Если вы используете стороннюю платформу или пакет, возможно, они используют один из этих API и нуждаются в изменении. Распространенная причина многих проблем — это зависимость от путей к файлам или библиотекам DLL, поставляемых с приложением.

В таблице ниже приведены сведения об API библиотеки среды выполнения для использования с одним файлом.

API Примечание
Assembly.CodeBase Выдает исключение PlatformNotSupportedException.
Assembly.EscapedCodeBase Выдает исключение PlatformNotSupportedException.
Assembly.GetFile Выдает исключение IOException.
Assembly.GetFiles Выдает исключение IOException.
Assembly.Location Возвращает пустую строку.
AssemblyName.CodeBase Возвращает null .
AssemblyName.EscapedCodeBase Возвращает null .
Module.FullyQualifiedName Возвращает строку со значением или вызывает исключение.
Marshal.GetHINSTANCE Возвращает -1.
Module.Name Возвращает строку со значением .

Вот некоторые рекомендации по исправлению для распространенных сценариев:

  • Чтобы получить доступ к файлам, расположенным рядом с исполняемым файлом, используйте AppContext.BaseDirectory.
  • Чтобы найти имя файла исполняемого файла, используйте первый элемент Environment.GetCommandLineArgs()или, начиная с .NET 6, используйте имя файла из ProcessPath.
  • Чтобы не допустить доставку свободных файлов в целом, используйте внедренные ресурсы.

После обработки двоичных файлов перед объединением

Для некоторых рабочих процессов требуется постобработка двоичных файлов перед объединением. Распространенный пример — подписывание. Пакет SDK dotnet предоставляет точки расширения MSBuild, позволяющие обрабатывать двоичные файлы непосредственно перед объединением одного файла. Доступные API:

  • Целевой объект PrepareForBundle , который будет вызван до GenerateSingleFileBundle
  • Объект , содержащий все файлы, которые будут объединяться в пакет
  • Свойство AppHostFile , указывающее шаблон apphost. После обработки может потребоваться исключить apphost из обработки.

Чтобы подключиться к этому, необходимо создать целевой объект, который будет выполняться между PrepareForBundle и GenerateSingleFileBundle .

Рассмотрим следующий пример узла проекта Target .NET:

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

Сжатие сборок в однофайловых приложениях

Однофайловые приложения можно создавать с включенным сжатием во внедренных сборках. Задайте свойству EnableCompressionInSingleFile значение true . В одном создаваемом файле будут сжаты все внедренные сборки, что может значительно уменьшить размер исполняемого файла.

Однако из-за этого может снизиться производительность. При запуске приложения сборки распаковываются в память, что занимает некоторое время. Перед использованием рекомендуется измерить как изменение размера, так и стоимость запуска при включении сжатия. Влияние может значительно различаться в разных приложениях.

Проверка однофайловых приложений

Приложения с одним файлом можно проверить с помощью средства ILSpy. Средство может отображать все файлы, упакованные в приложение, и проверять содержимое управляемых сборок.

См. также

  • Развертывание приложений .NET Core
  • Публикация приложений .NET с помощью .NET CLI
  • Публикация приложений .NET Core с помощью Visual Studio
  • Команда dotnet publish

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Создавайте проекты и решения Visual Studio, работайте с ними и удаляйте их

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Из этой статьи вы узнаете, как создавать с нуля и использовать проекты Visual Studio для хранения артефактов, необходимых для создания приложений. Если вы не знакомы с проектами в Visual Studio, см. этот обзор проектов и решений. Сведения о том, как быстро создать проект из шаблона, см. в статье «Создание нового проекта в Visual Studio».

Проекты содержат объекты, необходимые для создания приложения в Visual Studio, например файлы исходного кода, растровые изображения, значки, а также ссылки на компоненты и службы. Когда вы создаете проект, Visual Studio создает решение, в котором будут содержаться проекты. После этого в решение при необходимости можно добавить другие новые или существующие проекты. Можно также создавать пустые решения. Решения также могут содержать файлы, не связанные с определенным проектом.

Diagram that shows the solution and project hierarchy.

Этот раздел относится к Visual Studio в Windows. Информацию о Visual Studio для Mac см. в статье Создание проектов в Visual Studio для Mac.

Решения и проекты можно просматривать в окне инструментов, которое называется обозревателем решений. На следующем снимке экрана показан пример консольного решения C# в Обозреватель решений, который содержит два проекта: Калькулятор и КалькуляторLibrary. Каждый проект содержит несколько файлов и папок. Полужирным шрифтом выделено имя запускаемого проекта. Этот проект выполняется при запуске приложения. Вы можете выбрать запускаемый проект.

Screenshot of Solution Explorer with two projects.

Вы можете создать проект самостоятельно, добавив в него необходимые файлы, однако в Visual Studio также предлагается ряд шаблонов, помогающих быстро приступить к работе. Используя шаблон, вы получаете проект, который уже содержит все основные компоненты для проекта данного типа. Вы можете переименовывать файлы, как вам требуется, а также добавлять новый или существующий код и другие ресурсы.

Это говорится, что решения и проекты не требуются для разработки приложений в Visual Studio. Вы также можете открыть код, клонированные из Git или скачанный в другом месте. Дополнительные сведения см. в статье Разработка кода в Visual Studio без использования проектов и решений.

Создание проекта из шаблона проекта

Сведения о том, как выбрать шаблон для создания нового проекта, см. в статье Создание проекта в Visual Studio. А пример проекта и решения, созданного с нуля, а также пошаговые инструкции и пример кода см. в статье Общие сведения о проектах и решениях.

Создание проекта из существующих файлов с текстом программ

Если у вас есть коллекция файлов исходного кода, вы можете легко добавить их в проект.

  1. Последовательно выберите Файл>Создать>Project From Existing Code (Проект из существующего кода).
  2. В мастере создания проекта по существующим файлам с кодом выберите в раскрывающемся списке Задать тип проекта нужный тип проекта, а затем нажмите Далее.
  3. В мастере перейдите к месту хранения файлов и введите имя нового проекта в поле Имя. По завершении нажмите кнопку «Готово «.

Этот вариант лучше всего подходит для относительно простой коллекции файлов. Сейчас поддерживаются только типы проектов C++, Apache Cordova, Visual Basic и C#.

Добавление файлов в решение

Если у вас есть файлы, которые относятся к нескольким проектам, например файл сведений для решения или иные файлы, которые относятся к уровню решения, а не отдельного проекта, их можно добавить в само решение. Чтобы добавить элемент в решение, щелкните правой кнопкой мыши узел решения в Обозревателе решений и выберите в контекстном меню пункты Добавить>Новый элемент или Добавить>Существующий элемент.

Файл решения представляет собой структуру для организации проектов в Visual Studio. Он содержит состояние этих сведений в двух файлах: SLN (текстовый файл, общий) и SUO (двоичный, скрытый, параметры решения для конкретного пользователя). Таким образом, решение — это не ресурс, который нужно копировать и переименовывать; вместо этого лучше создать новое решение, а затем добавить в него существующие элементы.

Сравнение файлов

Начиная с версии 17.7 можно сравнить файлы в Обозреватель решений с помощью параметров контекстного меню правой кнопкой мыши. Дополнительные сведения см. в разделе «Средство сравнения файлов» на странице «Сведения о Обозреватель решений».

Создание проекта .NET, настроенного для конкретной версии .NET Framework

При создании проекта .NET Framework можно указать определенную версию платформы .NET Framework, которую он должен использовать. (При создании проекта .NET Core версию платформы указывать не нужно.)

Чтобы указать версию платформа .NET Framework, выберите раскрывающееся меню Framework на странице «Настройка нового проекта«.

Screenshot of the Framework selector in the

Screenshot of the Framework selector in the

Создание пустых решений

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

Создание пустого решения

  1. В строке меню выберите Файл>Создать>Проект.
  2. В поле поиска на странице Создание проекта введите решение.
  3. Выберите шаблон «Пустое решение » и нажмите кнопку «Далее«.
  4. Введите значение Имя и Расположение для решения, а затем нажмите Создать.

После создания пустого решения к нему можно добавить новые или существующие проекты или элементы, выбрав пунктДобавить новый элемент или Добавить существующий элемент в меню Проект.

Как было сказано ранее, вы также можете открывать файлы кода без использования проекта или решения. Сведения о разработке кода таким образом см. в статье Разработка кода в Visual Studio без использования проектов и решений.

Удаление решения, проекта или элемента

Контекстное меню можно использовать для удаления решений, проектов или элементов в Visual Studio, но только, чтобы удалить их из текущего решения или проекта.

Чтобы полностью удалить решение или другой компонент из системы, удалите папку, содержащую файлы SLN и SUO решения, используя проводник Windows. (Перед удалением решения вы, возможно, захотите выполнить резервное копирование проектов и файлов на случай, если они вам понадобятся позже).

SUO-файл является скрытым и не отображается, если проводник имеет параметры по умолчанию. Для отображения скрытых файлов в меню Вид проводника установите флажок Скрытые элементы.

Окончательное удаление решения

Вы можете перейти к проводнику в Windows, используя Обозреватель решений в Visual Studio. Это делается следующим образом.

  1. В Обозревателе решений щелкните правой кнопкой мыши меню (контекстное меню) решение, которое вы хотите удалить, и выберите Открыть папку в проводнике.
  2. В проводнике перейдите на один уровень вверх.
  3. Выберите папку, содержащую решение, и нажмите клавишу DELETE.

Связанный контент

  • Общие сведения о проектах и решениях
  • Управление свойствами проектов и решений
  • Фильтрация решений в Visual Studio
  • Примеры кода от разработчиков

Окно Solution Explorer

Ранее вы кратко ознакомились с множеством компонентов, образующих среду интегрированной разработки Visual Studio 2013. Теперь вы получите возможность поработать с тремя наиболее широко используемыми инструментальными окнами — Solution Explorer, Toolbox и Properties.

Создавая или открывая приложение или просто отдельный файл, система Visual Studio 2013 использует концепцию решения (solution) для связывания всех компонентов в единое целое. Как правило, решение состоит из одного или нескольких проектов, каждый из которых, в свою очередь, содержит множество элементов, связанных с ним. В прошлом такими элементами были обычные файлы, но в настоящее время все чаще проекты создаются из элементов, которые образованы из нескольких файлов или вообще не включают в себя ни одного файла.

Инструментальное окно Solution Explorer ( Ctrl+Alt+L ) обеспечивает удобное визуальное представление решения, проектов и элементов, как показано на рисунке ниже. На этом рисунке представлены три проекта, образующих дерево: WPF-приложение на языке C#, служебная WCF-библиотека и библиотека классов.

Окно Solution Explorer с несколькими проектами

С каждым проектом связана отдельная пиктограмма, которая, как правило, указывает тип проекта и язык, на котором он написан. У этого правила есть несколько исключений, например, проекты установки (setup projects) не имеют языка программирования, на котором они создаются.

Один из узлов обращает на себя особое внимание, поскольку он выделен полужирным шрифтом. Это значит, что этот проект является стартовым, иначе говоря, проектом, который запускается, когда вы выполняете команду Debug —> Start Debugging или нажимаете клавишу F5 . Для того чтобы сделать проект стартовым, щелкните на соответствующей пиктограмме правой кнопкой мыши и выполните команду Set as StartUp Project. Стартовыми можно сделать сразу несколько проектов. Для этого следует использовать диалоговое окно Solution Properties, которое открывается, когда вы щелкаете правой кнопкой мыши на узле Solution и выбираете пункт Properties.

Панель инструментов в верхней части окна Solution Explorer позволяет настроить внешний вид этого окна, а также задать комбинации клавиш для разного внешнего вида отдельных элементов. Например, кнопка Show All Files — открывает листинг решения и позволяет показать на экране дополнительные файлы и папки:

Показ скрытых файлов с помощью Solution Explorer

Вы видите, что узел Reference Library на самом деле состоит из нескольких файлов, содержащих настройки, ресурсы и информацию о сборке.

В этом развернутом представлении можно увидеть все файлы и папки, относящиеся к структуре проекта. К сожалению, при изменении файловой системы окно Solution Explorer не обновляется автоматически, чтобы отразить эти изменения. Для того чтобы обеспечить правильное представление списка файлов и папок, можно использовать кнопку Refresh.

Инструментальная панель Solution Explorer чувствительна к контексту, поэтому в зависимости от выбранного типа узла на ней отображаются разные кнопки.

Предпросмотр файлов

Одной из наиболее интересных особенностей Visual Studio 2013 является возможность предварительного просмотра файла в обозревателе решений. Для этого необходимо нажать кнопку «Preview Selected Items» и выбрать файл в окне Solution Explorer. На вкладке обзора появится файл и его содержимое:

Предпросмотр файла в Solution Explorer

Вы можете свободно перемещаться по файлу и редактировать его, как и любой другой файл. Тем не менее, при переходе к другому файлу в Solution Explorer, вкладка Preview заменяется новым файлом. Другими словами, режим предпросмотра служит для быстрого открытия и перемещения по файлам вашего проекта.

Типичные задачи

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

Контекстное меню Solution Explorer для решения

Контекстное меню Solution Explorer для проекта

Контекстное меню Solution Explorer для файла

Если вы еще не включили в свой проект диаграмму классов, щелкните на кнопке View Class Diagram. После этого система автоматически добавит в ваш проект эту диаграмму и все классы. Если проект содержит много классов, то эта процедура может занять довольно много времени и в результате возникнет большая и неудобная диаграмма классов. Намного лучше добавлять диаграммы классов вручную, поскольку в таком случае пользователь сохраняет над ними полный контроль.

Первые пункты в левом и среднем меню связаны с созданием либо всего решения, либо выбранного проекта. В большинстве случаев эффективнее всего выполнить команду Build, поскольку она создает лишь те проекты, которые подверглись изменениям. Однако в некоторых случаях пользователю необходимо выполнить команду Rebuild, которая создает все взаимосвязанные проекты независимо от их состояния. Если вы хотите всего лишь удалить все дополнительные файлы, возникшие в процессе создания решения, то можете выполнить команду Clean. Эта команда может оказаться полезной, если вы хотите упаковать свое решение и послать его кому-нибудь в виде электронного письма и не хотите, чтобы при этом в него попали все временные файлы или файлы вывода, возникшие при создании решения.

Для большинства элементов в окне Solution Explorer первая команда контекстного меню похожа на команду, показанную на рисунке выше: по умолчанию команды Open и Open With. позволяют указать, как будет открыт конкретный элемент. Это особенно полезно при работе с ресурсными XML-файлами. Система Visual Studio 2013 открывает эти файлы, используя встроенный редактор ресурсов, но это не позволяет вам вносить определенные изменения и поддерживать все типы данных, которые вы хотели бы включить в проект (позже будет показано, как можно использовать свои собственные типы данных в файлах ресурсов). Используя команду Open With. можно вызвать редактор XML Editor.

Контекстные меню для узлов Solution, Project и Folder содержат команду Open Folder in Windows Explorer, что позволяет быстро открыть окно проводника Windows для поиска выбранного элемента и не искать в каталогах свое решение.

Добавление проектов и элементов

К основным действиям, выполняемым в окне Solution Explorer, относятся добавление, удаление и переименование проектов и элементов. Для того чтобы добавить новый проект в существующее решение, следует выполнить команду Add —> New Project в контекстном меню, связанном с узлом Solution. В этом случае откроется диалоговое окно, показанное на рисунке ниже, которое с небольшими изменениями унаследовано от предыдущей версии системы Visual Studio. Теперь шаблоны проектов можно сортировать и искать.

Добавление проекта в решение в Visual Studio

Панель, показанная на рисунке, справа, содержит информацию о выбранном проекте, например его тип и описание. В иерархии Installed, появляющейся в левой части диалогового окна Add New Project, шаблоны в первую очередь упорядочены по языкам, а затем по технологиям. Среди шаблонов прежде всего следует выделить типы Office, позволяющие создавать как приложение, так и надстройки для документов, как это принято в большинстве приложений подобного рода. Хотя надстройки Office по-прежнему используют набор инструментов Visual Studio Tools for Office (VSTO), теперь он встроен в систему Visual Studio и не требует отдельной инсталляции.

Предусмотрены также закладки Recent и Online. Шаблоны Online можно сортировать и искать точно так же, как Installed, хотя критерии сортировки для них являются более широкими и включают в себя дату создания, рейтинги и частоту загрузки.

Кроме того, следует выделить еще одну особенность этого диалогового окна — возможность выбирать разные версии платформы. Если вы работаете со старым проектом и не хотите переводить его в новую версию платформы .NET Framework, то все равно можете воспользоваться новыми возможностями, такими как улучшенная технология IntelliSense. В противном случае пришлось бы инсталлировать как систему Visual Studio 2013, так и предыдущую версию, чтобы создавать проекты для более старых версий платформы. Выбор платформы также включен в критерии сортировки, что ограничивает список доступных шаблонов проекта лишь теми шаблонами, которые совместимы с выбранной версией платформы .NET Framework.

При открытии существующих решений или проектов в системе Visual Studio 2013 они проходят все этапы работы с мастером обновлений (upgrade wizard), в ходе которых в файлы проектов и решений вносятся небольшие изменения. К сожалению эти небольшие изменения связаны с внедрением дополнительных свойств, которые разрушают существующий процесс сборки, если вы используете предыдущую версию системы сборки проектов MSBuild. По этой причине вы будете вынуждены перевести всю свою команду разработчиков на версию Visual Studio 2013.

Одной из наиболее неудачных и плохо понимаемых особенностей системы Visual Studio является концепция проекта Web Site. Этот проект отличается от проекта Web Application, который можно добавить с помощью диалогового окна Add —> New Project. Для того чтобы добавить проект Web Site, необходимо выполнить команду Add —> Web Site в контекстном меню, связанном с узлом Solution. Данная команда открывает диалоговое окно, похожее на то, которое показано на рисунке ниже. В этом окне можно выбрать тип создаваемого веб-проекта. В большинстве ситуаций при этом просто определяется тип создаваемого в проекте элемента, заданный по умолчанию.

Создание проекта Web Site в Visual Studio

Если вы работаете с одним или несколькими проектами, то сначала должны добавить элементы. Для этого выполните команду Add в контекстном меню, которое связано с узлом проекта в окне Solution Explorer. Первое подменю New Item запускает диалоговое окно Add New Item, как показано на рисунке ниже:

Добавление новых элементов в проект

Подобно диалоговым окнам New Project и New Web Site, диалоговое окно Add New Item подверглось «косметической операции». Кроме перечисления только тех шаблонных элементов, которые являются релевантными выбранному проекту, это диалоговое окно позволяет искать установленные шаблоны, а также выходить в режим онлайн для поиска шаблонов, созданных другими.

Возвращаясь к контекстному меню Add, вы заметите большое количество заранее определенных сокращенных команд, таких как User Control и Class. Они делают немного больше, чем простой пропуск стадии поиска подходящего шаблона в диалоговом окне Add New Item. Это диалоговое окно по-прежнему открыто, поскольку вы должны задать имя создаваемого элемента.

Важно понимать, что вы добавляете в проект элементы, а не файлы. Хотя многие шаблоны содержат только один файл, некоторые команды, например Window или User Control, добавят в ваш проект несколько новых файлов.

Добавление ссылок

Выпуская новые технологии разработки программного обеспечения, их авторы каждый раз обещают более удобное повторное использование кода, но в действительности лишь некоторые из них выполняют данное обещание. Один из способов, с помощью которого Visual Studio 2013 поддерживает повторное использование компонентов, основан на ссылках проекта.

Раскрыв любой проект, вы обнаружите множество библиотек .NET Framework, например System и System.Core, на которые для создания проекта необходимо как-то сослаться. По существу, ссылки позволяют компилятору распознавать типы, свойства, поля и имена методов, определенные в сборке. Если хотите повторно использовать класс из сторонней библиотеки или вашу собственную сборку, созданную по технологии .NET, вы должны добавить ссылку на нее с помощью контекстного меню Add Reference, ассоциированного с узлом проекта в окне Solution Explorer.

Когда вы открываете диалоговое окно Add Reference, показанное на рисунке ниже, система Visual Studio 2013 исследует локальный компьютер, кэш глобальной сборки Global Assembly Cache и ваше решение, чтобы представить список известных библиотек, на которые можно ссылаться. Этот список содержит ссылки как на компоненты .NET, так и на компоненты COM, внося их в разные разделы, а также ссылки на проекты и недавно использованные ссылки.

Диалоговое окно Add Reference для добавления ссылок на сборки в проект

В старых версиях системы Visual Studio это диалоговое окно загружалось чрезвычайно медленно. Если компонент, который вам необходим, не указан в списке, выберите закладку Browse, позволяющую найти файл, содержащий искомые компоненты, непосредственно в файловой системе. Если вы заблаговременно загрузили список проектов в ваше решение, представили его как закладку по умолчанию и теперь неторопливо загружаете содержание для остальных закладок, то это диалоговое окно откроется на экране почти мгновенно.

Как и в других проектно-ориентированных средах разработки, начиная с первых версий среды VB, вы можете добавлять в проект ссылки, а не скомпилированные двоичные компоненты. Преимущество этой модели состоит в том, что теперь легче выполнять отладку компонента, на который указывает ссылка, и вы сможете гарантированно работать только с самыми последними версиями всех компонентов, хотя в больших решениях эта процедура может оказаться слишком неповоротливой.

Если ваше решение состоит из многих проектов (как правило, крупным считается решение, состоящее более чём из двадцати проектов), то можете разделить его на несколько решений, соответствующих разным подмножествам проектов. В этом случае вы обогатите свой опыт отладки целого приложения и одновременно повысите производительность системы Visual Studio на этапах загрузки и построения решения. В качестве альтернативы можете создать разные конфигурации построения решения, чтобы создать подмножество проектов.

Добавление ссылок на службы

Другой тип ссылок, который обслуживает проводник Solution Explorer, называется ссылками на службу (service references). В предыдущих версиях системы Visual Studio они назывались веб-ссылками, но с появлением программной модели Windows Communication Foundation (WCF) в систему Visual Studio была включена более общая команда меню Add Service Reference. Она открывает диалоговое окно Add Service Reference, показанное на рисунке ниже. В данном примере использована возможность открывать выпадающее меню с помощью кнопки Discover, чтобы просмотреть список Services в решении.

Добавление ссылки на службу в Visual Studio

К сожалению, это диалоговое окно еще раз демонстрирует, что компания Microsoft не совсем правильно понимает потребности пользователей. Хотя само диалоговое окно допускает изменение размеров, область для вывода ответного сообщения о статусе этого не позволяет, тем самым затрудняя чтение генерируемых сообщений об ошибках. К счастью, если при попытке системы Visual Studio 2013 получить доступ к информации о службе возникла ошибка, появляется гиперссылка, с помощью которой можно открыть диалоговое окно Add Service Reference Error. Как правило, это позволяет получить достаточную информацию, чтобы устранить проблему.

В левом нижнем углу на рисунке показана кнопка Advanced. Диалоговое окно Service Reference Settings, которое открывается после щелчка на этой кнопке, позволяет вам указать, какие типы считаются частью ссылки на службу. По умолчанию считается, что все локальные системные типы соответствуют типам, опубликованным службой. Если это условие не выполняется, то уточните значения в области Data Туре, которая является частью этого диалогового окна. В левом нижнем углу диалогового окна Service Reference Settings расположена кнопка Add Web Reference, позволяющая добавлять в решение более привычные веб-ссылки. Это может оказаться важным, если вы ограничены в ресурсах или пытаетесь поддерживать работу в нескольких системах.

Как скомпилировать единый exe файл в проекте Visual Studio?

Сохраняется вот так, как можно создать единый файл?

Отслеживать
48.4k 5 5 золотых знаков 22 22 серебряных знака 57 57 бронзовых знаков
задан 15 мая 2021 в 11:24
Денис Волков Денис Волков
79 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков

@AK Я не согласен с тем, что прилинкованный ответ отвечает на вопрос, поскольку это .NET Core/5, а ответ для Framework.

15 мая 2021 в 11:39
@aepot Действительно, ловите плюсик за внимательность к деталям.
15 мая 2021 в 12:14

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Вам нужно опубликовать Build -> Publish приложение, в параметрах публикации выбрать Folder, далее выбрать win-x64 файл и поставить галочку Produce single file.

Публикация приложения с одним файлом с помощью Visual Studio

Visual Studio создает многократно используемые профили публикации, которые управляют процессом публикации приложения.

  1. В обозревателе решений щелкните правой кнопкой мыши проект, который нужно опубликовать. Нажмите кнопку Опубликовать. Обозреватель решений с контекстным меню, где выделен пункт Опубликовать
    Если у вас еще нет профиля публикации, следуйте инструкциям по его созданию и выберите Папка в качестве типа целевого объекта.
  2. Нажмите кнопку Изменить. Профиль публикации Visual Studio с кнопкой Изменить
  3. В диалоговом окне Параметры профиля задайте следующие параметры.
    • Параметру Режим развертывания задайте значение Автономное или Зависимое от платформы.
    • В качестве значения параметра Целевая среда выполнения укажите платформу, на которую будет выполнена публикация. (Значение должно быть отличным от Переносимый.)
    • Выберите Создать отдельный файл. Нажмите кнопку Сохранить, чтобы сохранить параметры и вернуться в диалоговое окно Публикация. Диалоговое окно параметров профиля с выделенными параметрами для режима развертывания, целевой среды выполнения и создания отдельного файла
  4. Чтобы опубликовать приложение с одним файлом, нажмите кнопку Опубликовать.

Дополнительные сведения см. в статье Публикация приложений .NET Core с помощью Visual Studio.

По поводу того, чем опции Self-contained и Framework-dependent отличаются, я ранее рассказывал здесь.

Если все прошло хорошо, профиль публикации Properties\PublishProfiles\FolderProfile.pubxml будет выглядеть вот так

    Release Any CPU bin\Release\Publish FileSystem net5.0-windows win-x64 false True False   

А в интерфейсе публикации оно будет выглядеть так

введите сюда описание изображения

Примечание для .NET 5 и более новых версий

Так как в .NET 5 оптимизировали технологию запуска приложения из одиночного файла, теперь по умолчанию он не включает в себя нативные библиотеки, а включает только управляемые.

Если ваша сборка зависит от нативных библиотек, и вы столкнулись с тем, что dll файлы при публикации все равно лежат отдельно, то чтобы это вылечить, в первую секцию .cproj файла нужно добавить опцию:

true 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *