Обрезка автономных развертываний и исполняемых файлов

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

Автономная модель развертывания — это специализированная версия автономной модели развертывания, оптимизированная для уменьшения размера развертывания. Минимизация размера развертывания является критически важным требованием для некоторых сценариев на стороне клиента, например приложений Blazor. В зависимости от сложности приложения указывается только подмножество сборок платформы, а для запуска приложения требуется подмножество кода в каждой сборке. Неиспользуемые компоненты библиотеки не нужны, поэтому их можно удалить из упакованного приложения.

Однако существует риск того, что анализ приложения во время компиляции может привести к сбоям во время выполнения, поскольку некоторые сложные шаблоны кода (в основном с использованием отражений) невозможно надежно выявлять и анализировать. Чтобы устранить такие проблемы, создаются предупреждения всякий раз, когда не удается полностью проанализировать шаблон кода. Сведения о значении предупреждений об обрезке и способах их устранения см. в статье Общие сведения о предупреждениях об обрезке.

Примечание.

  • Обрезка полностью поддерживается в .NET 6 и более поздних версиях. В .NET Core 3.1 и .NET 5 обрезка была экспериментальной функцией.
  • Она доступна только для автономно публикуемых приложений.

Компоненты, вызывающие проблемы при обрезке

Предупреждение

Не все типы проекта можно обрезать. Дополнительные сведения см. в статье Известные несовместимости обрезки.

Любой код, который вызывает проблемы при анализе во время компиляции, плохо подходит для обрезки. Некоторые шаблоны программирования, которые вызывают типичные проблемы при использовании в приложении, возникают из-за использования неограниченных отражений и внешних зависимостей, не доступных во время компиляции. Пример несвязанного отражения является устаревшим сериализатором, например сериализацией XML, и примером невидимых внешних зависимостей является встроенный COM. Чтобы устранить предупреждения об обрезке в приложении, воспользуйтесь статьей Общие сведения о предупреждениях об обрезке, а чтобы сделать библиотеку совместимой с обрезкой, изучите статью Подготовка библиотек .NET для обрезки.

Включение обрезки

  1. Добавьте <PublishTrimmed>true</PublishTrimmed> в файл проекта.

    Это свойство создает обрезаемое приложение для автономной публикации. Также будут отключены функции, несовместимые с обрезкой, а во время сборки будут отображаться предупреждения о совместимости.

    <PropertyGroup>
        <PublishTrimmed>true</PublishTrimmed>
    </PropertyGroup>
    
  2. Затем опубликуйте приложение с помощью команды dotnet publish или Visual Studio.

Публикация с помощью CLI

В следующем примере приложение для Windows публикуется как обрезанное автономное приложение.

dotnet publish -r win-x64

Обрезка поддерживается только для автономных приложений.

<PublishTrimmed> необходимо задать в файле проекта, чтобы несовместимые с обрезкой функции были отключены во время dotnet build. Однако этот параметр также можно задать в качестве аргумента dotnet publish:

dotnet publish -r win-x64 -p:PublishTrimmed=true

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

Публикация с помощью Visual Studio

  1. В Обозреватель решений щелкните правой кнопкой мыши проект, который вы хотите опубликовать, и выберите "Опубликовать".

    Solution Explorer with a right-click menu highlighting the Publish option.

    Если у вас еще нет профиля публикации, следуйте инструкциям по его созданию и выберите Папка в качестве типа целевого объекта.

  2. Выберите "Дополнительные действия" ">Изменить".

    Visual studio publish profile with edit button.

  3. В диалоговом окне Параметры профиля задайте следующие параметры.

    • Параметру Режим развертывания задайте значение Автономное.
    • В качестве значения параметра Целевая среда выполнения укажите платформу, на которую будет выполнена публикация.
    • Выберите " Обрезать неиспользуемый код".

    Нажмите кнопку Сохранить, чтобы сохранить параметры и вернуться в диалоговое окно Публикация.

    Profile settings dialog with deployment mode, target runtime, and trim unused assemblies options highlighted.

  4. Чтобы опубликовать обрезанное приложение, нажмите кнопку Опубликовать.

Дополнительные сведения см. в статье Публикация приложений .NET Core с помощью Visual Studio.

Публикация с помощью Visual Studio для Mac

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

См. также