Приложения, зависящие от среды выполнения, больше не автономные
Приложения, относящиеся к среде выполнения или приложения .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>