Поделиться через


Обзор публикации приложений .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

Создайте кроссплатформенный двоичный файл

Межплатформенные двоичные файлы создаются при публикации приложения в виде зависимых от платформыв виде файла библиотеки DLL . Файл dll называется в честь проекта. Например, если у вас есть приложение с именем word_reader, создается файл с именем word_reader.dll. Приложения, опубликованные таким образом, выполняются с помощью команды dotnet <filename.dll> и могут выполняться на любой платформе.

Межплатформенные двоичные файлы можно запускать в любой операционной системе до тех пор, пока целевая среда выполнения .NET уже установлена. Если целевая среда выполнения .NET не установлена, приложение может запускаться с помощью более новой среды выполнения, если приложение настроено на перекат. Дополнительные сведения см. в статье о приложениях, зависящих от платформы, и их обновлении.

Вы можете запустить приложение как исполняемый файл для конкретной платформы или как кроссплатформенный двоичный файл с помощью команды dotnet. При запуске обычных серверных приложений не должно быть разницы в поведении приложения между использованием исполняемого файла, зависящего от платформы, и команды dotnet. Запуск через исполняемый файл, зависящий от платформы, обеспечивает лучшую интеграцию с операционной системой. Например:

  • В списке процессов отображается имя исполняемого файла приложения, а не dotnet, что может быть запутано, если существует несколько.
  • Вы можете настроить исполняемый файл для конкретной платформы с определенными функциями ОС. Например, обратитесь к этой дискуссии о настройке размера стека по умолчанию в Windows.

Следующая команда создает кроссплатформенный двоичный файл:

Тип Команда
зависящий от платформы кроссплатформенный двоичный. dotnet publish

Публикация зависимой от фреймворка

Приложения, опубликованные как зависящие от платформы, являются кроссплатформенными и не включают среду выполнения .NET. Пользователю приложения требуется установить среду выполнения .NET.

Публикация приложения в зависимости от платформ ы создает кроссплатформенный двоичный в виде файла библиотеки DLL и исполняемого конкретной платформы, предназначенных для текущей платформы. dll является кроссплатформенной, а исполняемый файл нет. Например, если вы публикуете приложение с именем word_reader и предназначено для Windows, создается исполняемый файл word_reader.exe вместе с word_reader.dll. При нацеливании на Linux или macOS создается исполняемый файл word_reader вместе с word_reader.dll. Если приложение использует пакет NuGet с реализациями для конкретной платформы, зависимости для всех платформ копируются в папку publish\r\{platform}.

Кроссплатформенный двоичный файл приложения можно запускать с помощью команды 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

См. также