Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения, специфичные для среды выполнения, или приложения .NET с RuntimeIdentifier
, по умолчанию больше не являются автономными. Вместо этого они зависят от платформы по умолчанию.
Это критическое изменение в следующих ситуациях:
- Если вы развернули, распространили или опубликовали приложение и не добавили явно свойство
SelfContained
, но при этом не требовалось, чтобы среда выполнения .NET была установлена на компьютере для его работы. В этом случае, возможно, вы использовали предыдущее поведение для создания автономного приложения по умолчанию. - Если вы используете средство IL Link. В этом случае выполните действия, описанные в разделе "Рекомендуемое действие " для повторного использования IL Link.
Предыдущее поведение
Ранее, если был указан идентификатор среды выполнения (RID) (через RuntimeIdentifier), приложение было опубликовано как автономное, даже если SelfContained
оно не было явно указано.
Дополнительно:
- Если
PublishSelfContained
не было явно установлено вfalse
, свойства публикацииPublishSingleFile
иPublishAot
подразумевалиRuntimeIdentifier
и, следовательно,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 остается более безопасным и up-to-date. Приложения, имеющие собственную копию среды выполнения, не получают обновления системы безопасности. Это изменение делает большее количество приложений зависимыми от платформы по умолчанию.
- В идеале параметры командной строки являются ортогональными. В этом случае средство поддерживает как специфичное для RID автономное развертывание (SCD), так и специфичное для RID развертывание, зависящее от фреймворка (FDD). Поэтому было нелогично, что если нет RID, по умолчанию используется FDD, а если есть RID, по умолчанию используется SCD. Это поведение часто запутано для пользователей.
.NET 6 предупредил пользователей об этом критическом изменении со следующим предупреждением:
предупреждение NETSDK1179: При использовании "--runtime" требуется один из вариантов "--автономный" или "--не-автономный".
Теперь, когда у клиентов было время явно добавить SelfContained
, можно ввести перерыв.
Рекомендуемое действие
Если вы используете .NET 7 или более раннюю версию и полагаетесь на предыдущее поведение, где
SelfContained
было выведено, вы увидите следующее предупреждение:Для проектов с TargetFrameworks >= 8.0, идентификатор среды выполнения больше не предоставляет автономное приложение. Чтобы продолжить создание независимого приложения платформы .NET после обновления до версии 8.0, рекомендуется явно задать selfContained.
Следуйте указаниям предупреждения и объявите приложение как автономное. Это можно сделать в файле проекта или в качестве аргумента командной строки, например
dotnet publish --self-contained
.Если вы используете .NET 8 и хотите сохранить предыдущее поведение, установите
SelfContained
значениеtrue
таким же образом, как описано ранее.
Установить свойство файла проекта
SelfContained
— это свойство MSBuild, которое можно вставить в файл проекта, который является файлом с расширением CSPROJ, VBPROJ или FSPROJ . Задайте свойство следующим образом:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<SelfContained>true</SelfContained>
</PropertyGroup>
</Project>