Задать вопрос
rootovich1
@rootovich1

Как скомпилировать проект на C# в один .exe файл?

Всем привет.
Я написал простое консольное приложение на C# , под Windows .
Есть задача скомпилировать небольшой проект в 1 .exe файл. То есть , скрыть файлы .dll , которые создаются после компиляции.
Большинство из "нагугливанного" не работает (статьи 2001-2012 годов). Считаю , что вопрос актуален.
Какими средствами вы пользуйтесь?
  • Вопрос задан
  • 8987 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Single File Application - фича современных дотнетов со времён .net Core 3
Буквально при помощи одной опции в файле проекта или одной строкой в консоли собирает ваш проект в единый екзешник, в который ещё может быть опционально встроен рантайм.
Вот пример csproj:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <PropertyGroup>
    <!-- Вот это самое главное -->
    <PublishSingleFile>true</PublishSingleFile>
    <!-- Это чтобы тащить за собой рантайм До .NET 6 будут рядом лежать нативные библиотеки jit-а и сборщика мусора-->
    <SelfContained>true</SelfContained>
    <!-- Это необходимо, чтобы сборщик понимал, для какой ОС нужен экзешник -->
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <!-- Это чтобы ускорить запуск -->
    <PublishReadyToRun>true</PublishReadyToRun>
    <!-- Эти две строки, чтобы уменьшить размер бинарника -->
    <PublishTrimmed>true</PublishTrimmed>
    <TrimMode>link</TrimMode>
  </PropertyGroup>
</Project>

В результате получается единственный exe, который реально можно запустить где угодно, вне зависимости от установленной версии .NET

Для старых версий дотнета есть ILMerge и Costura.Fody, но в .net 5+ они не нужны, и я крайне советую использовать именно .NET 8, тк он сейчас самый актуальный
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
samodum
@samodum
Какой вопрос - такой и ответ
Не использовать References, перенести всё в основной проект
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы