none
Двухфайловость .NET 5.0 сборки RRS feed

  • Вопрос

  • Кто в теме, подскажите, для чего сборка для Windows состоит из двух файлов EXE и DLL? Мне понятно что мультиплатформенность, переносимость и прочая мега-чушь, но в чём сама соль создания именного такой сборки? Почему если я пишу для Win и меня не интересует кроссплатформенность я должен созерцать два файла? (про сборку в один огромный файл не говорим, это совсем другое)
    29 декабря 2020 г. 2:02

Ответы

Все ответы

  • Один файл (DLL) это Ваша сборка, а другой (EXE) это хост процесс, который хостит .NET и выполняет Вашу сборку. Можно обойтись и без EXE, но тогда Вашу сборку нужно будет загружать через другой хост, например сам dotnet.exe: dotnet exec x:\path\to\my.dll
    29 декабря 2020 г. 10:32
  • Вопрос не в этом.
    29 декабря 2020 г. 10:38
  • Видимо так сделано потому что это позволило избежать изменения загрузчика в ОС и быстро обеспечить поддержку. Ведь ОС много разных версий, часть уже не поддерживается и не обновляется и встроить в них возможность запуска данных приложений затруднительно и долго. Проше было добавить отдельную "запускалку" в родном для платформы формате.

    Что до числа файлов, то это скорее надуманная проблема. Любые более-менее сложные приложения состоят из десятков, сотен и даже тысяч файлов. Одним меньше, одним больше - разницы нет.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    29 декабря 2020 г. 17:22
    Модератор
  • Так собственно в чем проблема включить dll внутрь exe для win проекта? Я не вижу чтобы рядом с exe лежал бинарник для запуска в linux, macos. поэтому такое объяснение не принимается, нет логики.

    Тогда сделайте 378 dll файлов - одним больше, одним меньше.

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

    30 декабря 2020 г. 2:07
  • >Так собственно в чем проблема включить dll внутрь exe для win проекта?

    Так ведь это вроде уже реализовано? dotnet publish -r win-x86 --self-contained=false /p:PublishSingleFile=true

    Просто такой подход не равнозначен тому, что было в .NET Framework. Здесь полученный файл будет обычным самораспаковывающимся архивом, который извлекается во временную папку при первом запуске. В .NET Framework был нормальный EXE файл, при этом поддержка со стороны загрузчика не была обязательной, насколько я помню. Для запуска на старых версиях добавлялась минимальная точка входа, которая определяла наличие CLR и загружала ее. То есть если цель темы в том, чтобы поныть, как раньше было лучше, вы попали в точку.

    30 декабря 2020 г. 7:35
  • как раз сегодня нашел вариант с публикацией в один файл с привязкой к платформе, меня это устраивает, один EXE в 150К. Тема закрыта.
    30 декабря 2020 г. 9:54