Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Основное внимание в пользовательском интерфейсе приложений .NET Multi-platform (.NET MAUI) в .NET 10 уделяется улучшению качества продукта. Сведения об исправлениях ошибок продукта в .NET MAUI в .NET 10 см. в следующих релизных заметках:
- .NET MAUI в .NET 10 (предварительная версия 3)
- .NET MAUI в .NET 10 предварительная версия 2
- .NET MAUI в .NET 10 предварительная версия 1
Чтобы узнать, что нового в каждом выпуске .NET MAUI в .NET 10, см. следующие заметки о выпуске:
- .NET MAUI в .NET 10 (предварительная версия 3)
- .NET MAUI в .NET 10 предварительная версия 2
- .NET MAUI в .NET 10 предварительная версия 1
Важный
Из-за работы с внешними зависимостями, такими как средства Xcode или Android SDK, политика поддержки .NET MAUI отличается от политики поддержки .NET и .NET Core. Дополнительные сведения см. в документе о политике поддержки .NET MAUI.
В .NET 10, .NET MAUI поставляется в виде рабочей загрузки .NET и в составе нескольких пакетов NuGet. Преимущество этого подхода заключается в том, что он позволяет легко закреплять проекты в определенных версиях, а также позволяет легко просматривать нераспроданные или экспериментальные сборки.
Интеграция .NET Aspire
.NET MAUI для .NET 10 содержит новый шаблон проекта, который создает проект службы .NET Aspire по умолчанию для .NET MAUI. Это предоставляет набор методов расширения, которые подключают данные телеметрии и обнаружение служб к приложению.
Чтобы подключить телеметрию и обнаружение служб к приложению, измените CreateMauiApp
метод в MauiProgram
классе для вызова AddServiceDefaults
метода из проекта по умолчанию службы .NET Aspire в объекте MauiAppBuilder
:
builder.AddServiceDefaults();
Метод AddServiceDefaults
выполняет следующие задачи:
- Настраивает метрики OpenTelemetry и трассировку.
- Добавляет функции обнаружения служб.
- Настраивает HttpClient для работы с обнаружением служб.
Важный
Проект службы .NET Aspire по умолчанию предназначен для совместного использования файла Extensions.cs и его функциональных возможностей. Не включайте в этот проект другие общие функции или модели. Вместо этого используйте проект библиотеки общих классов для этих целей.
Для получения дополнительной информации см. стандартные параметры службы .NET Aspire.
Мультипликация
FadeTo
Методы , RelRotateTo
RotateTo
ScaleTo
ScaleXTo
ScaleYTo
RotateYTo
LayoutTo
RelScaleTo
RotateXTo
и TranslateTo
методы были нерекомендуемы FadeToAsync
и заменены методами , LayoutToAsync
RelRotateToAsync
RelScaleToAsync
RotateToAsync
RotateXToAsync
RotateYToAsync
ScaleToAsync
ScaleXToAsync
ScaleYToAsync
TranslateToAsync
Дополнительные сведения см. в разделе "Базовая анимация".
Элементы управления
.NET MAUI в .NET 10 включает усовершенствования элементов управления и устаревания.
CollectionView и CarouselView
.NET MAUI в .NET 9 включал два необязательных обработчика в iOS и Mac Catalyst, что привело к улучшению производительности и стабильности для CollectionView и CarouselView. В .NET 10 это обработчики по умолчанию для CollectionView и CarouselView.
Редактор и запись в Android
В Android Editor и Entry представления изменяют свои собственные представления с AppCompatEditText
MauiAppCompatEditText
, что добавляет поддержку SelectionChanged
события.
HybridWebView
HybridWebView получает перегрузку InvokeJavaScriptAsync, которая вызывает указанный метод JavaScript без указания сведений о типе возвращаемого значения. Дополнительные сведения см. в статье Вызов методов JavaScript, которые не возвращают значение.
По умолчанию все исключения, вызываемые кодом JavaScript, будут отправляться в .NET, где они повторно выбрасываются как исключения .NET.
Отображение списка
ListView не рекомендуется использовать, EntryCellа также , ImageCell, SwitchCell, TextCellи ViewCell. Вместо этого следует использовать CollectionView.
Замечание
Cell не устарел, потому что в настоящее время используется для генерации исходного кода. Однако его следует считать устаревшим.
Панель поиска
SearchBar получает привязываемое свойство SearchIconColor
, которое задает цвет значка поиска:
<SearchBar Placeholder="Search items..."
SearchIconColor="Blue" />
SearchBar также получает привязываемое ReturnType
свойство типа, ReturnTypeуказывающее внешний вид кнопки возврата. Значение по умолчанию этого свойства равно Search
.
Более подробную информацию см. в разделе SearchBar.
Выключатель
Switch получает привязываемое свойство OffColor
, которое задает цвет коммутатора при его отключенном состоянии:
<Switch OffColor="Red"
OnColor="Green" />
Дополнительные сведения см. в разделе Switch.
Представление таблицы
TableView устарел. Вместо этого следует использовать CollectionView.
WebView в Android
Когда видео размещено в WebView на Android, теперь их можно воспроизводить в полноэкранном режиме, включив allowfullscreen
в iframe
.
Дополнительные сведения см. в разделе "Воспроизведение видео в полноэкранном режиме".
Центр сообщений
MessagingCenter был создан внутри .NET 10. Использование в вашем коде можно заменить на WeakReferenceMessenger
в пакете NuGet CommunityToolkit.Mvvm . Дополнительные сведения см. в разделе Messenger.
Тени
В .NET 10 класс ShadowTypeConverter
в пространстве имен Microsoft.Maui.Controls
теперь является общедоступным.
Дополнительные сведения о том, как тени можно указать с помощью отформатированных строк, см. в разделе "Тень".
Platform features
Функции платформы .NET MAUI получили некоторые обновления в .NET 10.
Отображение модальной страницы в качестве всплывающего элемента в iOS и Mac Catalyst
.NET MAUI для .NET 10 добавляет платформо-специфическую функцию, которая отображает модальную страницу как всплывающее окно на iOS и Mac Catalyst. Он используется путем задания привязываемого свойства Page.ModalPopoverSourceView
в View
, который определяет источник модального окна, привязываемого свойства Page.ModalPopoverRect
к Rectangle, который определяет прямоугольник в представлении, из которого будет исходить всплывающее окно, и привязываемого свойства Page.ModalPresentationStyle
к Popover
.
using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;
public partial class PopoverPage : ContentPage
{
public PopoverPage(View modal, Rectangle rectangle)
{
InitializeComponent();
On<iOS>().SetModalPopoverView(modal);
On<iOS>().SetModalPopoverRect(rectangle);
On<iOS>().SetModalPresentationStyle(UIModalPresentationStyle.Popover);
}
}
Затем перейдите на модальную страницу с помощью метода Navigation.PushModalAsync
:
Page modalPage = new PopoverPage(originButton, Rectangle.Empty);
await Navigation.PushModalAsync(modalPage);
Дополнительные сведения см. в разделе Отображение модальной страницы в виде всплывающего окна в iOS и Mac Catalyst.
Геолокация
Класс Geolocation получает свойство только для IsEnabled
чтения, которое можно использовать для определения того, включены ли службы расположения на устройстве.
Совместимость с iOS и Mac Catalyst, доступность и расширения
Следующие методы расширения совместимости iOS AccessibilityExtensions
, в Microsoft.Maui.Controls.Compatibility.Platform.iOS
, были признаны устаревшими:
SetAccessibilityHint
SetAccessibilityLabel
SetAccessibilityHint
SetAccessibilityLabel
Вместо этого следует использовать метод Microsoft.Maui.Platform.UpdateSemantics
.
Переопределения для iOS и Mac Catalyst в MauiWebViewNavigationDelegate
Теперь можно переопределять следующие методы MauiWebViewNavigationDelegate
в пространстве имен Microsoft.Maui.Platform
:
DecidePolicy
DidFailNavigation
DidFailProvisionalNavigation
DidFinishNavigation
Преобразование текста в речь
Класс SpeechOptions получает свойство Rate
, которое управляет скоростью речи при использовании функций TextToSpeech. Дополнительные сведения см. в параметрах преобразования текста в речь.
Веб-проверка подлинности
WebAuthenticator получает перегрузку метода AuthenticateAsync, которая позволяет с помощью аргумента CancellationToken программно отменить поток проверки подлинности.
Всплывающие окна
Устаревшие методы DisplayAlert
и DisplayActionSheet
были заменены на методы DisplayAlertAsync
и DisplayActionSheetAsync
.
Дополнительные сведения см. в разделе "Отображение всплывающих окон".
Расширения разметки XAML
Расширение разметки XAML FontImageExtension устарело. Вместо этого следует использовать тип FontImageSource:
<Button Text="Press me"
Background="Transparent"
TextColor="{AppThemeBinding Light=Black, Dark=White}"
ImageSource="{FontImageSource Glyph=MyGlyph, Color={AppThemeBinding Light=Black, Dark=White}, FontFamily=FontAwesome, Size=18}" />
Для удобства синтаксис элемента свойства также можно использовать:
<Button Text="Press me"
Background="Transparent"
TextColor="{AppThemeBinding Light=Black, Dark=White}" >
<Button.ImageSource>
<FontImageSource Glyph="MyGlyph"
Color="{AppThemeBinding Light=Black, Dark=White}"
FontFamily="FontAwesome"
Size="18" />
</Button.ImageSource>
</Button>
Дополнительные сведения см. в разделе Отображение значков шрифтов.
.NET для Android
.NET для Android в .NET 10 добавляет поддержку API 36 и JDK 21 и включает в себя работу, чтобы сократить время сборки и повысить производительность. Дополнительные сведения о .NET для Android в .NET 10 см. в следующих заметках о выпуске:
- .NET для Android 10 (предварительная версия 3)
- .NET для Android 10 предварительная версия 2
- .NET для Android 10 Пробная версия 1
Бета-версия 3 привязок Android 16 (Baklava)
Google выпустила бета-версию 3 пакета SDK для Android 16 (API 36). Хотя все еще классифицируется как предварительная версия, интерфейсы прикладного программирования (ABIs) были объявлены стабильными, и окончательный выпуск Android 16 от Google ожидается этим летом.
API 36 теперь используется по умолчанию в .NET 10, что означает, что API 36 будет использоваться при $(TargetFramework)
установке net10.0-android
свойства сборки.
Это приведет к проблемам при использовании Visual Studio и Visual Studio Code с .NET 10, так как они еще не знают об API 36, что приведет к возникновению ошибки XA5207 . Чтобы устранить эту проблему, необходимо вручную установить API36 platform.jar в каталог пакета SDK для Android или дождаться предстоящего обновления до Visual Studio.
Рекомендуемый минимальный поддерживаемый API Android
Шаблоны проектов .NET для Android были обновлены, чтобы указать 24 (Nougat) в качестве $(SupportedOSPlatformVersion)
по умолчанию вместо 21 (Lollipop). Это предотвращает сбой среды выполнения desugaring при использовании методов интерфейса Java по умолчанию.
Хотя API 21 по-прежнему поддерживается в .NET 10, рекомендуется обновить существующие проекты до API 24, чтобы избежать непредвиденных ошибок среды выполнения.
dotnet run
поддержка
Ранее команда dotnet run
не поддерживается для проектов .NET для Android, так как она не принимает параметры, необходимые для указания используемого устройства или эмулятора Android.
В .NET 10 проекты .NET для Android можно запускать с помощью команды dotnet run
:
// Run on the only attached Android physical device
dotnet run -p:AdbTarget=-d
// Run on the only running Android emulator
dotnet run -p:AdbTarget=-e
// Run on the specified Android physical device or emulator
dotnet run -p:AdbTarget="-s emulator-5554"
Свойство $(AdbTarget)
передается в adb
. Для получения дополнительной информации смотрите раздел Выполнение команд оболочки на сайте developer.android.com.
Методы маршалинга включены по умолчанию
В .NET 9 новый способ создания маршаловых методов, необходимых для вызова Java в код C#, обеспечил улучшения производительности запуска. Однако в .NET 9 они были отключены по умолчанию.
В .NET 10 они включены по умолчанию. Проблемы с этими методами маршалинга часто проявляются в виде зависания при запуске. Если вы сталкиваетесь с зависанием программы при запуске в предварительных версиях .NET 10, которого не было в .NET 9, попробуйте отключить методы маршалинга, установив для свойства MSBuild $(AndroidEnableMarshalMethods)
значение false
в файле проекта:
<PropertyGroup>
<AndroidEnableMarshalMethods>false</AndroidEnableMarshalMethods>
<PropertyGroup>
Если это исправляет зависание, отправьте запрос о проблеме.
метаданные ArtifactFilename
для элемента @(AndroidMavenLibrary)
@(AndroidMavenLibrary)
был добавлен в .NET 9 и позволяет автоматически загружать и связывать Java библиотеку из Maven. Как правило, эта библиотека называется {artifact.Id}-{artifact.Version}.[jar|aar]
. Однако это не соответствует стандарту и может быть произвольно отличаться.
В .NET 10 можно добавить метаданные ArtifactFilename
в элемент MSBuild @(AndroidMavenLibrary)
, чтобы разрешить альтернативное имя файла:
<ItemGroup>
<AndroidMavenLibrary Include="com.facebook.react:react-android" Version="0.76.0" ArtifactFilename="react-android-0.76.0-release.aar" />
</ItemGroup>
System.IO.Compression, используемый для создания .apk
Исторически dotnet/android-libzipsharp использовался для обработки ZIP-архивов и создания файлов AAB и .apk .
В .NET 10:
- Для вызовов ZipArchive командной строки
dotnet build
используется для создания файлов AAB и .apk. Это приведет к более быстрому времени сборки. - Для сборок Visual Studio dotnet/android-libzipsharp все еще используется, так как версия System.IO.Compression .NET Framework не может быть использована.
Компиляции времени проектирования в Visual Studio больше не вызывают aapt2
Чтобы ускорить процесс сборки в рамках времени разработки, aapt2
больше не вызывается. Вместо этого .aar
файлы и базовые ресурсы Android анализируются напрямую. Это сокращает время сборки на этапе проектирования для некоторых модульных тестов с более чем 2 секунд до менее чем 600 мс.
Строительство с помощью JDK 21
Теперь проекты .NET для Android можно создавать с помощью JDK 21.
generator
результат избегает потенциального использования System.Reflection.Emit
Запуск приложения и общая производительность были оптимизированы за счет удаления путей кода, которые могут приводить к возникновению System.Reflection.Emit
в процессе вызова из Java в C#.
ApplicationAttribute.ManageSpaceActivity
больше не вызывает InvalidCastException
Установка свойства ApplicationAttribute.ManageSpaceActivity
не приводит к ошибке XAGJS7007 в .NET 10.
.NET для iOS
.NET 10 в iOS, tvOS, Mac Catalyst и macOS поддерживают следующие версии платформы:
- iOS: 18.2
- tvOS: 18.2
- Mac Catalyst: 18.2
- macOS: 15.2
Дополнительные сведения о .NET 10 в iOS, tvOS, Mac Catalyst и macOS см. в следующих заметках о выпуске:
Сведения об известных проблемах см. в разделе Известные проблемы в .NET 10.
Триммер включен в дополнительных конфигурациях
Триммер теперь включен в следующих конфигурациях:
- Симулятор iOS/arm64 (все конфигурации)
- TvOS Simulator/arm64 (все конфигурации)
- Mac Catalyst/arm64 (все конфигурации)
Предупреждения триммера, включенные по умолчанию
Предупреждения триммера ранее подавлялись, потому что библиотека базовых классов вызывала появление таких предупреждений, что означало невозможность самостоятельно устранить их все. Однако в .NET 9 все предупреждения обрезки iOS были исправлены, поэтому предупреждения обрезки теперь включены по умолчанию. Чтобы отключить предупреждения триммера, задайте для свойства MSBuild $(SuppressTrimAnalysisWarnings)
значение true
в файле проекта:
<PropertyGroup>
<SuppressTrimAnalysisWarnings>true</SuppressTrimAnalysisWarnings>
</PropertyGroup>
Объединение исходных ресурсов в библиотеках
Проекты библиотеки могут иметь различные типы ресурсов пакета, такие как раскадровки, xibs, списки свойств, изображения, модели CoreML и атласы текстур, и они упаковываются в скомпилированную библиотеку как внедренные ресурсы.
Обработка этих ресурсов, таких как компиляция раскадровок или XIB-файлов, или оптимизация списков свойств и изображений, выполняется перед внедрением, что усложняет процесс сборки библиотеки, поскольку обработка:
- Необходимо запустить на Mac, так как компиляция storyboards/xibs может выполняться только на Mac.
- Требуется набор инструментов Apple.
- Делает невозможным принятие решений на основе исходных ресурсов при создании приложения.
Поэтому поддержка, включенная по умолчанию для внедрения исходного ресурса в библиотеки, была добавлена в .NET 9, а в .NET 10 она теперь по умолчанию отключена. Чтобы отказаться от этого поведения, задайте для свойства MSBuild $(BundleOriginalResources)
значение false
в файле проекта:
<PropertyGroup>
<BundleOriginalResources>false</BundleOriginalResources>
</PropertyGroup>
Создание проектов привязки в Windows
Теперь проекты привязки полностью собираются на Windows, поэтому в удаленном подключении к Mac больше нет необходимости. Это значительно ускоряет создание проектов привязки в Windows.
NSUrlSessionHandler больше не задает минимальную поддерживаемую версию протокола TLS для сеанса.
NSUrlSessionHandler Ранее инициализировал NSUrlSessionConfiguration.TLSMinimumSupportedProtocol значение из свойства ServicePointManager.SecurityProtocol, но теперь устарел ServicePointManager класс. Поэтому перед созданием NSUrlSessionHandlerпараметра необходимо задать NSUrlSessionConfiguration.TLSMinimumSupportedProtocol значение:
var sessionConfiguration = NSUrlSessionConfiguration.DefaultSessionConfiguration;
sessionConfiguration.TlsMinimumSupportedProtocolVersion = TlsProtocolVersion.Tls13;
var handler = new NSUrlSessionHandler(sessionConfiguration);
Свойство NSUrlSessionHandler.BypassBackgroundSessionCheck игнорируется
Свойство NSUrlSessionHandler.BypassBackgroundSessionCheck
существует для старой проблемы во время выполнения Mono. Этот обходной путь больше не требуется, поэтому это свойство игнорируется.
Xcode 17
Добавлена поддержка Xcode 17, включая множество новых API в iOS 19, tvOS 19, macOS 16 и Mac Catalyst 19.