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


Приложения, зависящие от среды выполнения, больше не автономные

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

Это критическое изменение в следующих ситуациях:

  • При развертывании, распространении или публикации приложения и явном добавлении SelfContained свойства, но также не требуется, чтобы среда выполнения .NET была установлена на компьютере для работы. В этом случае, возможно, вы использовали предыдущее поведение для создания автономного приложения по умолчанию.
  • Если вы используете средство IL Link. В этом случае выполните действия, описанные в разделе "Рекомендуемое действие " для повторного использования IL Link.

Прежнее поведение

Ранее, если был указан идентификатор среды выполнения (RID) (через RuntimeIdentifier), приложение было опубликовано как автономное, даже если SelfContained оно не было явно указано.

Дополнительно:

  • Если PublishSelfContained не задано явное значениеfalse, свойства PublishSingleFile публикации и подразумевают RuntimeIdentifier и PublishAot SelfContained поэтому (если он не указан) во время операций, включая dotnet build, dotnet restoreи dotnet publish.
  • Свойство PublishTrimmed не подразумевало SelfContained.
  • Свойство PublishReadyToRun подразумевается SelfContained , если SelfContained он не указан.

Новое поведение

Начиная с .NET 8, для приложений, предназначенных для .NET 8 или более поздней версии, RuntimeIdentifier больше не подразумевается SelfContained по умолчанию. Вместо этого приложения, указывающие идентификатор среды выполнения, зависят от среды выполнения .NET по умолчанию (зависит от платформы). Приложения, предназначенные для .NET 7 или более ранних версий, не затрагиваются.

Дополнительно:

  • Если PublishSelfContained не задано явное значениеfalse, свойства PublishSingleFile публикации и PublishAot теперь подразумевают SelfContained (если оно не указано) только (dotnet publishто есть не дляdotnet build).dotnet restore
  • Свойство PublishTrimmed также теперь подразумевает SelfContained во время dotnet publish.
  • Свойство PublishReadyToRun больше не подразумевает, SelfContained предназначен ли проект для .NET 8 или более поздней версии.

Примечание.

Если вы публикуете использование msbuild /t:Publish и хотите, чтобы приложение было автономным, необходимо явно указать SelfContained, даже если у вашего проекта есть одно из перечисленных свойств публикации.

Представленные версии

.NET 8( предварительная версия 5)

Тип критического изменения

Это изменение может повлиять на совместимость исходного кода и совместимость на уровне двоичного кода.

Причина изменения

  • Новое поведение пакета SDK для .NET соответствует поведению Visual Studio.
  • Приложения, зависящие от платформы, по умолчанию меньше, так как в каждом приложении нет копий .NET.
  • Если .NET управляется за пределами приложения (то есть для развертываний, зависящих от платформы), .NET остается более безопасным и актуальным. Приложения, имеющие собственную копию среды выполнения, не получают обновления системы безопасности. Это изменение делает больше приложений, зависящих от платформы по умолчанию.
  • В идеале параметры командной строки являются ортогональными. В этом случае средство поддерживает автономное развертывание (SCD) и развертывание, зависяющее от платформы RID (FDD). Поэтому не имеет смысла, что по умолчанию для FDD и RID по умолчанию не используется SCD. Это поведение часто запутано для пользователей.

.NET 6 предупредил пользователей об этом критическом изменении со следующим предупреждением:

warning NETSDK1179: One of '--self-contained' or '--no-self-contained' options are required when '--runtime' is used. (предупреждение NETSDK1179: при использовании "--runtime" требуется параметр "--self-contained" или "--no-self-contained").

Теперь, когда у клиентов было время явно добавить SelfContained , это нормально ввести перерыв.

  • Если вы используете .NET 7 или более раннюю версию и полагаетесь на предыдущее поведение, где SelfContained было выведено, вы увидите следующее предупреждение:

    Для проектов с TargetFrameworks >= 8.0 Среда выполненияIdentifier больше не предоставляет приложение SelfContained. Чтобы продолжить создание независимого приложения платформы .NET после обновления до версии 8.0, рекомендуется явно задать selfContained.

    Следуйте указаниям предупреждения и объявите приложение как автономное. Это можно сделать в файле проекта или в качестве аргумента командной строки, например dotnet publish --self-contained.

  • Если вы используете .NET 8 и хотите сохранить предыдущее поведение, установите SelfContained значение true таким же образом, как описано ранее.

Установка свойства project-file

SelfContained — это свойство MSBuild, которое можно вставить в файл проекта, который является файлом с расширением CSPROJ, VBPROJ или FSPROJ . Задайте свойство следующим образом:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <SelfContained>true</SelfContained>
  </PropertyGroup>
</Project>

См. также