Когда я создаю проект приложения C# с именем MyApplication
с помощью .NET 6.0 в Windows, я получаю следующие файлы:
MyApplication.dll
MyApplication.exe
MyApplication.deps.json
MyApplication.dll.config
MyApplication.pdb
MyApplication.runtimeconfig.json
MyApplication.xml
Какие из этих файлов мне нужно распространять?
MyApplication.dll содержит IL-код приложения. Этот мне точно нужен.
MyApplication.exe — это загрузчик-заглушка, запускающий приложение. Мне это нужно.
MyApplication.pdb содержит информацию об отладке. Мне не нужно распространять это.
А что насчет остальных? Кажется, они содержат некоторую информацию о зависимости. Но требуется ли это только для компилятора или позже во время выполнения? (Мое приложение состоит из десятков dll).
Я бы также включил MyApplication.exe.config. Особенно, если вам нужно/планируется использовать некоторые параметры конфигурации во время выполнения.
Если вы хотите распространять приложение — вам нужно опубликовать его, а не просто собрать. В публикации dotnet есть краткое описание упомянутых вами файлов:
@GoodNightNerdPride Да, я знаю, что мог бы попробовать это, но когда дело доходит до зависимостей, это может привести к неправильным результатам, потому что это может работать в одной системе, а не в другой, в зависимости от того, какие версии среды выполнения установлены.
Из спецификации файлов конфигурации среды выполнения
- MyApp.dll — управляемая сборка для MyApp, включая маркер точки входа, совместимый с ECMA.
- MyApp.exe — копия исполняемого файла corehost.exe.
- MyApp.runtimeconfig.json — необязательный файл конфигурации, содержащий параметры конфигурации среды выполнения.
- MyApp.deps.json — список зависимостей, а также данные контекста компиляции и зависимости компиляции. Технически не требуется, но требуется для использования функций обслуживания или кэша пакетов/общих пакетов.
Поэтому, хотя файлы json не являются строго обязательными, я бы, вероятно, рекомендовал их включить.
MyApplication.xml
— это необязательный файл документации, который содержит комментарии для вашей dll. Это, вероятно, не нужно, если вы распространяете приложение, а не библиотеку, и в свойствах вашего проекта должна быть возможность отключить генерацию этого файла.
Вам также следует ознакомиться с документацией по развертыванию вашего приложения. Особенно хотелось бы рассмотреть части про автономную и публикацию одним файлом.
Спасибо, это то, что я искал. Автономная публикация или публикация в одном файле для меня не вариант, поскольку фактическое приложение состоит из нескольких исполняемых файлов и большого количества библиотек.
Вы можете выполнить дымовой тест, постепенно удаляя файлы из выходного каталога, пока
MyApplication.exe
больше не запустится.