Обзор публикации приложений .NET
Приложения, создаваемые с помощью .NET, можно публиковать в двух разных режимах, а режим влияет на то, как пользователь запускает приложение.
Публикация вашего приложения как автономного создает приложение, включающее среду выполнения .NET и библиотеки, а также его зависимости. Пользователи приложения могут запустить его на компьютере, на котором не установлена среда выполнения .NET.
Публикация приложения как зависимого от платформы создает приложение, которое включает в себя только само приложение и его зависимости. Пользователям приложения необходимо отдельно установить среду выполнения .NET.
Оба режима публикации по умолчанию создают исполняемый файл для конкретной платформы. Приложения, зависящие от платформы, можно создавать без исполняемого файла, и эти приложения являются кроссплатформенными.
При создании исполняемого файла можно указать целевую платформу с идентификатором среды выполнения (RID). Дополнительные сведения о RID см. в каталоге .NET RID .
В следующей таблице описаны команды, используемые для публикации приложения как зависимого от платформы среды или полностью автономного.
Тип | Команда |
---|---|
исполняемый файл, зависящий от среды выполнения, для текущей платформы. | dotnet publish |
исполняемый файл, зависимый от фреймворка, для определенной платформы. | dotnet publish -r <RID> |
двоичные, зависящие от платформы. | dotnet publish |
автономные исполняемые. | dotnet publish -r <RID> --self-contained |
Дополнительные сведения см. в команде .NET dotnet publish.
Создание исполняемого файла
Исполняемые файлы не являются кроссплатформенными, они относятся к операционной системе и архитектуре ЦП. При публикации приложения и создании исполняемого файла можно опубликовать приложение в виде самодостаточного или зависящего от фреймворка. Публикация приложения как автономного включает среду выполнения .NET с приложением, и пользователям приложения не нужно беспокоиться об установке .NET перед запуском приложения. Публикация приложения с зависимостью от среды выполнения не включает среду выполнения .NET; включены только само приложение и сторонние зависимости.
Следующие команды создают исполняемый файл:
Тип | Команда |
---|---|
исполняемый файл, зависящий от платформы, для текущей платформы. | dotnet publish |
исполняемый файл, зависящий от платформы, для конкретной платформы. | dotnet publish -r <RID> |
автономный исполняемый. | dotnet publish -r <RID> --self-contained |
Создайте кроссплатформенный двоичный файл
Межплатформенные двоичные файлы создаются при публикации приложения в виде dotnet <filename.dll>
и могут выполняться на любой платформе.
Межплатформенные двоичные файлы можно запускать в любой операционной системе до тех пор, пока целевая среда выполнения .NET уже установлена. Если целевая среда выполнения .NET не установлена, приложение может запускаться с помощью более новой среды выполнения, если приложение настроено на перекат. Дополнительные сведения см. в статье о приложениях, зависящих от платформы, и их обновлении.
Вы можете запустить приложение как исполняемый файл для конкретной платформы или как кроссплатформенный двоичный файл с помощью команды dotnet
. При запуске обычных серверных приложений не должно быть разницы в поведении приложения между использованием исполняемого файла, зависящего от платформы, и команды dotnet
. Запуск через исполняемый файл, зависящий от платформы, обеспечивает лучшую интеграцию с операционной системой. Например:
- В списке процессов отображается имя исполняемого файла приложения, а не
dotnet
, что может быть запутано, если существует несколько. - Вы можете настроить исполняемый файл для конкретной платформы с определенными функциями ОС. Например, обратитесь к этой дискуссии о настройке размера стека по умолчанию в Windows.
Следующая команда создает кроссплатформенный двоичный файл:
Тип | Команда |
---|---|
зависящий от платформы кроссплатформенный двоичный. | dotnet publish |
Публикация зависимой от фреймворка
Приложения, опубликованные как зависящие от платформы, являются кроссплатформенными и не включают среду выполнения .NET. Пользователю приложения требуется установить среду выполнения .NET.
Публикация приложения в зависимости от платформ
Кроссплатформенный двоичный файл приложения можно запускать с помощью команды dotnet <filename.dll>
и выполняться на любой платформе.
Зависимые от платформы и зависящие от фреймворка
Вы можете опубликовать приложение, зависящее от платформы, путем передачи параметров -r <RID>
в команду dotnet publish
. Таким образом публикация аналогична публикации, зависящей от платформы, за исключением того, что зависимости, зависящие от платформы, обрабатываются по-разному. Если приложение использует пакет NuGet с реализацией для конкретной платформы, копируются только зависимости целевой платформы. Эти зависимости копируются непосредственно в папку публикации .
Хотя технически двоичный файл является кроссплатформенным, однако, нацелясь на определенную платформу, это не гарантирует, что ваше приложение будет работать на разных платформах. Вы можете запустить dotnet <filename.dll>
, но приложение может завершиться сбоем при попытке получить доступ к зависимостям, отсутствующим для данной платформы.
Дополнительные сведения о ИДЕНТИФИКАТОРах см. в каталоге .NET RID.
Преимущества
небольшое развертывание
Распространяется только ваше приложение и его зависимости. Среда выполнения и библиотеки .NET устанавливаются пользователем, а все приложения совместно используют среду выполнения.кроссплатформенные
Ваше приложение и любая библиотека на основе .NET работают на других операционных системах. Вам не нужно определять целевую платформу для приложения. См. информацию о формате файла сборки .NET в .NET Assembly File Format.Использует последнюю исправленную версию среды выполнения
Приложение использует последнюю версию среды выполнения, соответствующую целевому семейству версий .NET, установленную в целевой системе. Это означает, что приложение автоматически использует последнюю исправленную версию среды выполнения .NET. Это поведение по умолчанию можно переопределить. Дополнительные сведения см. в статье платформозависимые приложения переход на более новую версию.
Недостатки
Требует предварительной установки среды выполнения
Приложение может работать только в том случае, если на хост-системе уже установлена версия .NET, на которую оно нацелено. Вы можете настроить поведение обновления для приложения, чтобы оно либо требовало конкретную версию .NET, либо допускало более новую версию .NET. Дополнительные сведения см. в статье о переключении платформозависимых приложений..NET может изменить
Можно обновить среду выполнения и библиотеки .NET на компьютере, где выполняется приложение. В редких случаях это может изменить поведение приложения, если вы используете библиотеки .NET, которые делают большинство приложений. Вы можете настроить, как приложение использует более новые версии .NET. Дополнительные сведения см. в статье приложения, зависящие от платформы, переходят на новую версию.
Примеры
Опубликуйте приложение как кроссплатформенное и зависимое от платформы. Исполняемый файл, предназначенный для текущей платформы, создается вместе с файлом dll. Все зависимости, зависящие от платформы, публикуются в приложении.
dotnet publish
Опубликовать приложение как специфичное для платформы и зависящее от фреймворка. Создается 64-разрядный исполняемый файл Linux вместе с dll-файлом . В приложении публикуются только зависимости целевой платформы.
dotnet publish -r linux-x64
Опубликовать автономный
Публикация приложения как автономного создает исполняемый файл для конкретной платформы. Папка публикации выходных данных содержит все компоненты приложения, включая библиотеки .NET и целевую среду выполнения. Приложение изолировано от других приложений .NET и не использует локальную общую среду выполнения. Пользователю вашего приложения нет необходимости загружать и устанавливать .NET.
Вы можете опубликовать автономное приложение, передав параметр --self-contained
в команду dotnet publish
. Исполняемый двоичный файл создается для указанной целевой платформы. Например, если у вас есть приложение с именем word_reader, и вы публикуете автономный исполняемый файл для Windows, создается файл word_reader.exe. При публикации для Linux или macOS создается файл word_reader. Целевая платформа и архитектура указываются с параметром -r <RID>
для команды dotnet publish
. Дополнительные сведения о ИДЕНТИФИКАТОРах см. в каталоге .NET RID.
Если приложение имеет платформо-зависимые зависимости, например пакет NuGet, содержащий такие зависимости, они копируются в папку публикации вместе с приложением.
Преимущества
Управление версией .NET
Вы управляете версией .NET, развернутой в приложении.таргетинг для конкретной платформы
Так как вы должны опубликовать приложение для каждой платформы, вы знаете, где работает ваше приложение. Если .NET представляет новую платформу, пользователи не смогут запускать приложение на этой платформе, пока не выпустите версию, предназначенную для этой платформы. Вы можете протестировать приложение для проблем совместимости перед запуском приложения на новой платформе.
Недостатки
более крупные развертывания
Так как ваше приложение включает в себя среду выполнения .NET и все зависимости приложения, размер загрузки и требуемое место на жестком диске больше, чем у версии , зависящей от платформы.Совет
Вы можете уменьшить размер развертывания в системах Linux примерно на 28 МБ, используя режим глобализации . Это заставляет приложение обрабатывать все культуры, как инвариантная культура .
Совет
обрезка IL может дополнительно уменьшить размер развертывания.
Труднее обновить версию .NET
Среда выполнения .NET (распределенная с приложением) может быть обновлена только путем выпуска новой версии приложения.
Примеры
Опубликуйте автономное приложение. Создается 64-разрядный исполняемый файл macOS.
dotnet publish -r osx-x64 --self-contained
Публикация автономного приложения. Создается исполняемый файл Windows 64-разрядной версии.
dotnet publish -r win-x64 --self-contained
Публикация с помощью образов ReadyToRun
Публикация с помощью образов ReadyToRun улучшает время запуска приложения за счет увеличения размера приложения. Дополнительные сведения см. в разделе ReadyToRun.
Преимущества
-
Улучшено время запуска
Приложение тратит меньше времени на выполнение JIT.
Недостатки
-
Больший размер
Приложение занимает больше места на диске.
Примеры
Публикация самодостаточного приложения и режима ReadyToRun. Создается 64-разрядный исполняемый файл macOS.
dotnet publish -c Release -r osx-x64 --self-contained -p:PublishReadyToRun=true
Опубликуйте автономное приложение в формате ReadyToRun. Создается исполняемый файл Windows 64-разрядной версии.
dotnet publish -c Release -r win-x64 --self-contained -p:PublishReadyToRun=true