exe из скомпилированного проекта не запускается без dll и runtimeconfig

Зарелизил небольшой проект для лабораторной, из библиотек только системная, забираю exe и он не работает. Проверяю в папке Release все работает. Выяснил, что для запуска ему необходимы dll, создаваемая вместе с проектом и runtimeconfig.json. Это баг или так и должно быть? И можно ли как-нибудь скомпилировать все в один exe файл?


Ответы (1 шт):

Автор решения: Pavel Mayorov

Так и должно быть: .NET Core штука кросс-платформенная, а .exe-файлы запускаются только на Windows. Вот и решили отделить саму программу от платформозависимой "запускалки".

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

dotnet ВашаПрограмма.dll

А exe-файл - это просто что-то вроде ярлыка.

Однако, можно попытаться и в один файл всё запихнуть. Для этого надо в папке с проектом выполнить следующую команду:

dotnet publish -r win10-x64 -p:Configuration=Release -p:PublishSingleFile=true

Здесь win10-x64 - это идентификатор рантайма, который указывает для какой из платформ делать публикацию. Полный их список можно найти вот тут: Каталог идентификаторов сред выполнения (RID) в .NET Core

Результат публикации найти можно по пути bin\…\Release\win10-x64\publish, также можно указать свой путь с помощью параметра -o:

dotnet publish … -o ваш\путь

Получив такую команду, сборщик .NET Core SDK попытается упихнуть в один файл что сможет. Но не факт что получится: если вы используете какие-нибудь недоработанные пакеты, возможны баги (и не думайте что сам .NET Core доработан). Однако, попробовать никто не мешает.

Подробности: https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#single-file-executables

→ Ссылка