Aracılığıyla paylaş


.NET 9 için .NET MAUI'deki yenilikler

.NET 9'da .NET Çok Platformlu Uygulama Kullanıcı Arabirimi 'nin (.NET MAUI) odağı, ürün kalitesini artırmaktır. Bu, test kapsamını genişletmeyi, uçtan uca senaryo testlerini ve hata düzeltmeyi içerir. .NET MAUI 9'daki ürün kalitesi iyileştirmeleri hakkında daha fazla bilgi için aşağıdaki sürüm notlarını inceleyin:

Önemli

Xcode veya Android SDK Araçları gibi dış bağımlılıklarla çalışma nedeniyle .NET MAUI destek ilkesi .NET ve .NET Core destek ilkesinden farklıdır. Daha fazla bilgi için bkz . .NET MAUI destek ilkesi.

.NET 9'da .NET MAUI bir .NET iş yükü ve birden çok NuGet paketi olarak sunulur. Bu yaklaşımın avantajı, projelerinizi belirli sürümlere kolayca sabitlemenize ve ayrıca yayınlanmamış veya deneysel derlemeleri kolayca önizlemenize olanak sağlamasıdır. Yeni bir .NET MAUI projesi oluşturduğunuzda, gerekli NuGet paketleri projeye otomatik olarak eklenir.

En düşük dağıtım hedefleri

.NET MAUI 9, iOS 12.2 ve Mac Catalyst 15.0 (macOS 12.0) için en düşük dağıtım hedeflerini gerektirir. Android ve Windows en düşük dağıtım hedefleri aynı kalır. Daha fazla bilgi için bkz . .NET MAUI uygulamaları için desteklenen platformlar.

Yeni denetimler

.NET MAUI 9 iki yeni denetim içerir.

HybridWebView

HybridWebView web görünümünde rastgele HTML/JS/CSS içeriği barındırmayı etkinleştirir ve web görünümündeki kod (JavaScript) ile web görünümünü barındıran kod (C#/.NET) arasında iletişim sağlar. Örneğin, mevcut bir React JS uygulamanız varsa, bunu platformlar arası bir .NET MAUI yerel uygulamasında barındırabilir ve C# ve .NET kullanarak uygulamanın arka ucunu oluşturabilirsiniz.

İhtiyacınız olan HybridWebView bir .NET MAUI uygulaması oluşturmak için:

  • Statik HTML, JavaScript, CSS, görüntüler ve diğer dosyalardan oluşan uygulamanın web içeriği.
  • HybridWebView Uygulamanın kullanıcı arabiriminin bir parçası olarak denetim. Bu, uygulamanın XAML'sinde başvurularak elde edilebilir.
  • İki bileşen arasında ileti göndermek için API'leri kullanan HybridWebView web içeriğindeki ve C#/.NET'teki kod.

Web içeriği de dahil olmak üzere uygulamanın tamamı paketlenmiş ve bir cihazda yerel olarak çalıştırılır ve ilgili uygulama mağazalarında yayımlanabilir. Web içeriği yerel bir web görünümü denetiminde barındırılır ve uygulama bağlamında çalışır. Uygulamanın herhangi bir bölümü dış web hizmetlerine erişebilir, ancak bunun için gerekli değildir.

Daha fazla bilgi için bkz . HybridWebView.

Windows için Başlık Çubuğu

Denetim, TitleBar Windows'ta uygulamanıza özel başlık çubuğu ekleme olanağı sağlar:

.NET MAUI Başlık Çubuğuna genel bakış.

herhangi TitleBar bir Windowüzerinde özelliğinin Window.TitleBar değeri olarak ayarlanabilir:

<Window.TitleBar>
    <TitleBar x:Name="TeamsTitleBar"
              Title="Hello World"
              Icon="appicon.png"
              HeightRequest="46">
        <TitleBar.Content>
            <Entry x:Name="SearchTitleBar"
                   Placeholder="Search"
                   VerticalOptions="Center"
                   MinimumWidthRequest="300"
                   MaximumWidthRequest="450"
                   HeightRequest="32"/>
        </TitleBar.Content>
    </TitleBar>
</Window.TitleBar>

C# dilinde kullanımına bir örnek:

Window.TitleBar = new TitleBar
{
    Title = "MAUI App",
    Icon = "appicon.png",
    HeightRequest = 46,
    LeadingContent = new AvatarButton()
};

ATitleBar, , LeadingContentve TrailingContent özellikleri aracılığıyla Contentyüksek oranda özelleştirilebilir:

<TitleBar Title="My App"
          BackgroundColor="#512BD4"
          HeightRequest="48">
    <TitleBar.Content>
        <SearchBar Placeholder="Search"
                   MaximumWidthRequest="300"
                   HorizontalOptions="FillAndExpand"
                   VerticalOptions="Center" />
    </TitleBar.Content>
    <TitleBar.TrailingContent>
        <ImageButton HeightRequest="36"
                     WidthRequest="36"
                     BorderWidth="0"
                     Background="Transparent">
            <ImageButton.Source>
                <FontImageSource Size="16"
                                 Glyph="&#xE713;"
                                 FontFamily="SegoeMDL2"/>
            </ImageButton.Source>
        </ImageButton>
    </TitleBar.TrailingContent>
</TitleBar>

Aşağıdaki ekran görüntüsü, sonuçta elde edilen görünümü gösterir:

.NET MAUI Başlık Çubuğu ekran görüntüsü.

Not

Denetim için TitleBar Mac Catalyst desteği gelecek bir sürümde eklenecektir.

Denetim geliştirmeleri

.NET MAUI 9, denetim geliştirmeleri içerir.

BackButtonBehavior OneWay bağlama modu

Bir Shell uygulamasında için ve IsEnabled üzerindeki BackButtonBehavior bağlama modu IsVisible artık BindingMode.OneWay yerine BindingMode.OneTimeolur. Bu, veri bağlamalarıyla çalışma zamanında geri düğmesinin davranışını daha kolay denetlemenizi sağlar:

<ContentPage ...>    
    <Shell.BackButtonBehavior>
        <BackButtonBehavior Command="{Binding BackCommand}"
                            IsVisible="{Binding IsBackButtonVisible}"
                            IconOverride="back.png" />   
    </Shell.BackButtonBehavior>
    ...
</ContentPage>

BlazorWebView

iOS ve Mac Catalyst 18'de .NET MAUI 9, içindeki BlazorWebView içeriği barındırmak için varsayılan davranışı olarak localhostdeğiştirir. İçeriği barındırmak için kullanılan iç 0.0.0.0 adres artık çalışmıyor ve hiçbir içeriğin yüklenmemesiyle sonuçlanıp BlazorWebView boş bir dikdörtgen olarak işleniyor.

Adresi kullanmayı 0.0.0.0 kabul etmek için MauiProgram.cs yöntemine CreateMauiApp aşağıdaki kodu ekleyin:

// Set this switch to use the LEGACY behavior of always using 0.0.0.0 to host BlazorWebView
AppContext.SetSwitch("BlazorWebView.AppHostAddressAlways0000", true);

Android'de askıda kalmayla BlazorWebView karşılaşırsanız sınıfınızdaki yönteminde CreateMauiApp bir AppContext anahtarı etkinleştirmeniz MauiProgram gerekir:

AppContext.SetSwitch("BlazorWebView.AndroidFireAndForgetAsync", true);

Bu anahtar, oluşan zaman uyumsuz imhayı tetikleyip unutmanızı sağlar BlazorWebView ve sonuç olarak Android'de oluşan atma kilitlenmelerinin çoğunu düzeltir. Daha fazla bilgi için bkz . Android'de yok etme kilitlenmelerini düzeltme.

CollectionView ve CarouselView

.NET MAUI 9, ve 'ye performans ve kararlılık iyileştirmeleri CollectionView CarouselViewgetiren iOS ve Mac Catalyst üzerinde iki isteğe bağlı yeni işleyici içerir. Bu işleyiciler API'leri UICollectionView temel alır.

Bu işleyicileri kullanmayı kabul etmek için sınıfınıza MauiProgram aşağıdaki kodu ekleyin:

#if IOS || MACCATALYST
builder.ConfigureMauiHandlers(handlers =>
{
    handlers.AddHandler<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2>();
    handlers.AddHandler<Microsoft.Maui.Controls.CarouselView, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2>();
});
#endif

ContentPage

.NET MAUI 9'da özellik Mac HideSoftInputOnTapped Catalyst ve Android ve iOS'ta da desteklenir.

Yumuşak klavye girişi desteği

.NET MAUI 9, , Dateve Timeiçin Passwordyeni yumuşak klavye girişi desteği ekler. Bunlar ve Entry denetimlerinde Editor etkinleştirilebilir:

<Entry Keyboard="Date" />

Metin hizalama

Numaralandırma, TextAlignment metin denetimlerindeki metni hizalamak için kullanılabilecek bir Justify üye ekler. Örneğin, ile HorizontalTextAlignment.Justifybir Label içindeki metni yatay olarak hizalayabilirsiniz:

<Label Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. In facilisis nulla eu felis fringilla vulputate."
       HorizontalTextAlignment="Justify"/>

TimePicker

TimePicker seçilen zaman değiştiğinde tetiklenen bir TimeSelected olay kazanır. Olaya TimeChangedEventArgs eşlik eden nesne, TimeSelected sırasıyla yeni ve eski zamanı belirten ve OldTime özelliklerine sahiptirNewTime.

WebView

WebView bir işlem beklenmedik şekilde ProcessTerminated sona erdiğinde tetiklenen bir WebView olay ekler. WebViewProcessTerminatedEventArgs Bu olaya eşlik eden nesne, işlemin neden başarısız olduğunu gösteren platforma özgü özellikleri tanımlar.

Uygulama yaşam döngüsü

.NET MAUI 9, iOS ve Mac Catalyst'te aşağıdaki uzaktan bildirim yaşam döngüsü yöntemlerini ekler:

  • RegisteredForRemoteNotifications, uygulama uzaktan bildirimler için başarıyla kaydolduğunda çağrılır.
  • ReceivedRemoteNotifications, uzak bir bildirim alındığında çağrılır.

Aşağıdaki örnekte bu yaşam döngüsü yöntemlerinin nasıl tükettiği gösterilmektedir:

using Microsoft.Maui.LifecycleEvents;

namespace PlatformLifecycleDemo;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureLifecycleEvents(events =>
            {
#if IOS || MACCATALYST
                events.AddiOS(ios => ios
                    .ReceivedRemoteNotifications((app, dictionary) => LogEvent(nameof(iOSLifecycle.OnReceivedRemoteNotifications)))
                    .RegisteredForRemoteNotifications((app, data) => LogEvent(nameof(iOSLifecycle.OnRegisteredForRemoteNotifications)));
#endif
                static bool LogEvent(string eventName, string type = null)
                {
                    System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}");
                    return true;
                }
            });

        return builder.Build();
    }
}

Kodda derlenmiş bağlamalar

Kodda yazılan bağlamalar genellikle çalışma zamanında yansımayla çözümlenen dize yollarını kullanır ve bunu yapmanın yükü platformdan platforma değişir. .NET MAUI 9, dize yolu yerine bağımsız Func değişken kullanarak bağlamaları tanımlayan ek SetBinding bir uzantı yöntemi sağlar:

// in .NET 8
MyLabel.SetBinding(Label.TextProperty, "Text");

// in .NET 9
MyLabel.SetBinding(Label.TextProperty, static (Entry entry) => entry.Text);

Bu derlenmiş bağlama yaklaşımı aşağıdaki avantajları sağlar:

  • Bağlama ifadelerini çalışma zamanı yerine derleme zamanında çözümleyerek veri bağlama performansı iyileştirildi.
  • Geçersiz bağlamalar derleme hataları olarak bildirildiği için daha iyi bir geliştirici sorun giderme deneyimi.
  • Düzenlerken IntelliSense.

Derlenmiş bağlama tanımlamak için tüm yöntemler kullanılamaz. İfade basit bir özellik erişim ifadesi olmalıdır. Aşağıdaki örneklerde geçerli ve geçersiz bağlama ifadeleri gösterilmektedir:

// Valid: Property access
static (PersonViewModel vm) => vm.Name;
static (PersonViewModel vm) => vm.Address?.Street;

// Valid: Array and indexer access
static (PersonViewModel vm) => vm.PhoneNumbers[0];
static (PersonViewModel vm) => vm.Config["Font"];

// Valid: Casts
static (Label label) => (label.BindingContext as PersonViewModel).Name;
static (Label label) => ((PersonViewModel)label.BindingContext).Name;

// Invalid: Method calls
static (PersonViewModel vm) => vm.GetAddress();
static (PersonViewModel vm) => vm.Address?.ToString();

// Invalid: Complex expressions
static (PersonViewModel vm) => vm.Address?.Street + " " + vm.Address?.City;
static (PersonViewModel vm) => $"Name: {vm.Name}";

Buna ek olarak, .NET MAUI 9 bağlamayı ile doğrudan nesnesine ayarlayan ve bağlama nesnesi örneğini döndüren bir Funcyöntem eklerBinding.Create:

// in .NET 8
myEntry.SetBinding(Entry.TextProperty, new MultiBinding
{
    Bindings = new Collection<BindingBase>
    {
        new Binding(nameof(Entry.FontFamily), source: RelativeBindingSource.Self),
        new Binding(nameof(Entry.FontSize), source: RelativeBindingSource.Self),
        new Binding(nameof(Entry.FontAttributes), source: RelativeBindingSource.Self),
    },
    Converter = new StringConcatenationConverter()
});

// in .NET 9
myEntry.SetBinding(Entry.TextProperty, new MultiBinding
{
    Bindings = new Collection<BindingBase>
    {
        Binding.Create(static (Entry entry) => entry.FontFamily, source: RelativeBindingSource.Self),
        Binding.Create(static (Entry entry) => entry.FontSize, source: RelativeBindingSource.Self),
        Binding.Create(static (Entry entry) => entry.FontAttributes, source: RelativeBindingSource.Self),
    },
    Converter = new StringConcatenationConverter()
});

Önemli

NativeAOT uygulamalarında ve tam kırpma etkinleştirilmiş uygulamalarda dize tabanlı bağlamalar yerine derlenmiş bağlamalar gereklidir.

XAML'de derlenmiş bağlamalar

.NET MAUI 8'de, derlenmiş bağlamalar özelliği tanımlayan Source tüm XAML bağlama ifadeleri için devre dışı bırakılır ve çoklu bağlamalarda desteklenmez. Bu kısıtlamalar .NET MAUI 9'da kaldırılmıştır.

Uygulamanız için NativeAOT'yi etkinleştirmediğiniz sürece .NET MAUI varsayılan olarak derlenmiş bağlamaları kullanmayan bağlamalar için derleme uyarıları üretmez. Ancak derleme özelliğini uygulamanızın proje dosyasında (*.csproj) olarak ayarlayarak $(MauiStrictXamlCompilation) derlenmiş bağlama uyarılarının oluşturulmasını true kabul edebilirsiniz:

<MauiStrictXamlCompilation>true</MauiStrictXamlCompilation>

İşleyici bağlantısının kesilmesi

İşleyicileri kullanarak özel bir denetim uygularken, olaylardan abonelikten kaldırma gibi herhangi bir yerel görünüm temizlemesi gerçekleştirmek için yöntemini uygulamak DisconnectHandler için her platform işleyicisi uygulaması gerekir. Ancak,.NET MAUI 9'un DisconnectHandler öncesinde uygulama kasıtlı olarak .NET MAUI tarafından çağrılmıyor. Bunun yerine, denetimi temizlemeyi seçerken (örneğin, bir uygulamada geriye doğru gezinirken) kendiniz çağırmanız gerekir.

.NET MAUI 9'da işleyiciler, bir uygulamada geriye doğru gezinirken olduğu gibi mümkün olduğunda denetimlerinin bağlantısını otomatik olarak keser. Bazı senaryolarda bu davranışı istemeyebilirsiniz. Bu nedenle, .NET MAUI 9, işleyicilerin denetimleriyle bağlantısının ne zaman kesildiğinde denetlemek için ekli bir HandlerProperties.DisconnectPolicy özellik ekler. Bu özellik, HandlerDisconnectPolicy sabit listesi aşağıdaki değerleri tanımlayan bir HandlerDisconnectPolicy bağımsız değişken gerektirir:

  • Automatic, işleyicilerin otomatik olarak bağlantısının kesileceğini gösterir. Bu, eklenen özelliğin HandlerProperties.DisconnectPolicy varsayılan değeridir.
  • Manual, işleyicilerin uygulama çağrılarak el ile bağlantısının DisconnectHandler kesilmesi gerektiğini gösterir.

Aşağıdaki örnekte, ekli özelliğin HandlerProperties.DisconnectPolicy ayarlanması gösterilmektedir:

<controls:Video x:Name="video"
                HandlerProperties.DisconnectPolicy="Manual"
                Source="video.mp4"
                AutoPlay="False" />

Eşdeğer C# kodu:

Video video = new Video
{
    Source = "video.mp4",
    AutoPlay = false
};
HandlerProperties.SetDisconnectPolicy(video, HandlerDisconnectPolicy.Manual);

Ayrıca, işleyicilerin belirli IViewbir ile bağlantısını kesen bir DisconnectHandlers uzantı yöntemi vardır:

video.DisconnectHandlers();

Bağlantı kesilirken, DisconnectHandlers yöntem el ile ilke ayarlayan bir denetimi tamamlayana veya ulaşana kadar denetim ağacını aşağı doğru yayacaktır.

Çok pencereli destek

.NET MAUI 9, Mac Catalyst ve Windows'ta şu yöntemle Application.Current.ActivateWindow belirli bir pencereyi öne getirme olanağı sağlar:

Application.Current?.ActivateWindow(windowToActivate);

Yerel ekleme

.NET MAUI 9, daha önce projenize el ile eklenmesi gereken yerel ekleme senaryoları için tam API'ler içerir:

var mauiApp = MauiProgram.CreateMauiApp();

#if ANDROID
var mauiContext = new MauiContext(mauiApp.Services, window);
#else
var mauiContext = new MauiContext(mauiApp.Services);
#endif

var mauiView = new MyMauiContent();
var nativeView = mauiView.ToPlatform(mauiContext);

Alternatif olarak, yöntemini kullanarak ToPlatformEmbedded uygulamanın çalıştığı platform için komutunu geçirebilirsiniz Window :

var mauiApp = MauiProgram.CreateMauiApp();
var mauiView = new MyMauiContent();
var nativeView = mauiView.ToPlatformEmbedded(mauiApp, window);

Her iki örnekte nativeView de platforma özgü bir sürümüdür mauiView.

.NET MAUI 9'da yerel eklenmiş bir uygulamayı önyüklemek için nesnenizde MauiAppBuilder uzantı yöntemini çağırınUseMauiEmbeddedApp:

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();

        builder
            .UseMauiEmbeddedApp<App>();

        return builder.Build();
    }
}

Proje şablonları

.NET MAUI 9, Visual Studio'ya Bir Razor sınıf kitaplığı projesinde ortak kodu paylaşan blazor Web uygulaması ile .NET MAUI Blazor Karma uygulamasıyla çözüm oluşturan bir .NET MAUI Blazor Karma ve Web Uygulaması proje şablonu ekler.

Şablon şu kaynaktan dotnew newda kullanılabilir:

dotnet new maui-blazor-web -n AllTheTargets

Kaynak sözlükleri

.NET MAUI 9'da, tek başına bir XAML ResourceDictionary (arka planda kod dosyası tarafından desteklenmeyen) varsayılan olarak XAML'sini derlemiştir. Bu davranışı geri çevirmek için XML üst bilgisinin ardından belirtin <?xaml-comp compile="false" ?> .

Kırpma özelliği anahtarları

.NET MAUI'nin çeşitli alanları özellik anahtarları olarak bilinen, devre dışı bırakılan özelliklerin kodunu ne zaman TrimMode=fullhem de NativeAOT için kaldırmayı mümkün hale getiren düzeltici yönergeleriyle birlikte gelir:

MSBuild özelliği Açıklama
MauiEnableVisualAssemblyScanning olarak ayarlandığında true.NET MAUI, uygulayan IVisual türler ve öznitelikler için [assembly:Visual(...)] derlemeleri tarar ve bu türleri kaydeder. Varsayılan olarak, bu derleme özelliği olarak falseayarlanır.
MauiShellSearchResultsRendererDisplayMemberNameSupported olarak ayarlandığında falsedeğeri SearchHandler.DisplayMemberName yoksayılır. Bunun yerine, sonuçların görünümünü SearchHandler tanımlamak için bir ItemTemplate sağlamanız gerekir. Varsayılan olarak, bu derleme özelliği olarak trueayarlanır.
MauiQueryPropertyAttributeSupport olarak ayarlandığında false, [QueryProperty(...)] gezinirken özellik değerlerini ayarlamak için öznitelikler kullanılmaz. Bunun yerine, sorgu parametrelerini kabul etmek için arabirimini uygulamanız IQueryAttributable gerekir. Varsayılan olarak, bu derleme özelliği olarak trueayarlanır.
MauiImplicitCastOperatorsUsageViaReflectionSupport olarak ayarlandığında false. .NET MAUI, değerleri bir türden diğerine dönüştürürken örtük atama işleçlerini aramaz. Bu, farklı türlerdeki özellikler arasındaki bağlamaları etkileyebilir ve bağlanabilir bir nesnenin özellik değerini farklı türde bir değerle ayarlayabilir. Bunun yerine, türünüz için bir TypeConverter tanımlamanız ve özniteliğini kullanarak türüne [TypeConverter(typeof(MyTypeConverter))] eklemeniz gerekir. Varsayılan olarak, bu derleme özelliği olarak trueayarlanır.
_MauiBindingInterceptorsSupport olarak ayarlandığında false.NET MAUI, yöntemlere SetBinding yapılan çağrıları engellemez ve bunları derlemeyi denemez. Varsayılan olarak, bu derleme özelliği olarak trueayarlanır.

Özellik anahtarını kullanmak için ilgili MSBuild özelliğini uygulamanızın proje dosyasına (*.csproj) yerleştirmeniz gerekir ve bu da ilgili kodun .NET MAUI derlemelerinden kesilmesine neden olur. Bir uygulamanın gerektirmediği özellikleri devre dışı bırakmak, kırpma moduyla birleştirildiğinde uygulama boyutunu azaltmaya Full yardımcı olabilir.

XAML

, , IValueProviderIMarkupExtension<T>ve uygulayan IMarkupExtensionve IExtendedTypeConverter veya AcceptEmptyServiceProviderAttributeile RequireServiceAttribute ek açıklama eklemesi gereken tüm sınıflar. Bu, uygulama boyutunu azaltmaya ve çalışma zamanı performansını geliştirmeye yardımcı olan daha verimli kod oluşturulmasını sağlayan .NET MAUI 9'da kullanıma sunulan bir XAML derleyici iyileştirmesi nedeniyle gereklidir.

Bu özniteliklerle işaretleme uzantılarına açıklama ekleme hakkında bilgi için bkz . Hizmet sağlayıcıları.

Xcode eşitleme

.NET MAUI 9, varlık katalogları, plist dosyaları, görsel taslaklar ve xib dosyaları dahil olmak üzere Apple'a özgü dosyaları .NET projeleriyle yönetmek için Xcode kullanmanızı sağlayan Xcode eşitlemesini (xcsync ) içerir. Araç, bir .NET projesinden geçici bir Xcode projesi oluşturmak ve Xcode dosyalarındaki değişiklikleri .NET projenize eşitlemek için iki ana komut içerir.

Bu dosyaları oluşturmak veya eşitlemek ve bir proje dosyası ile ek bağımsız değişkenler geçirmek için veya xcsync-sync komutlarıyla kullanırsınız:dotnet build xcsync-generate

dotnet build /t:xcsync-generate
    /p:xcSyncProjectFile=<PROJECT>
    /p:xcSyncXcodeFolder=<TARGET_XCODE_DIRECTORY>
    /p:xcSyncTargetFrameworkMoniker=<FRAMEWORK>
    /p:xcSyncVerbosity=<LEVEL>

Daha fazla bilgi için bkz . Xcode eşitleme.

Kullanım dışı API'ler

.NET MAUI 9, gelecek bir sürümde tamamen kaldırılacak olan bazı API'leri kullanım dışı bırakır.

Çerçeve

Denetim Frame .NET MAUI 9'da kullanım dışı olarak işaretlenir ve gelecek bir sürümde tamamen kaldırılacaktır. Denetimin Border yerine kullanılması gerekir. Daha fazla bilgi için bkz . Kenarlık.

MainPage

Bir nesnedeki özelliğini Application kullanarak MainPage uygulamanızın ilk sayfasını tanımlamak yerine, özelliğini Window uygulamanızın ilk sayfasına ayarlamanız Page gerekir. Özelliği ayarladığınızda MainPage .NET MAUI'de dahili olarak olan budur, bu nedenle özelliğin MainPage kullanım dışı olarak işaretlenmesiyle ortaya çıkan bir davranış değişikliği yoktur.

Aşağıdaki örnekte, geçersiz kılma yoluyla bir Windowüzerinde özelliğinin ayarlanması Page gösterilmektedirCreateWindow:

public partial class App : Application
{
    public App()
    {
        InitializeComponent();
    }

    protected override Window CreateWindow(IActivationState? activationState)
    {
        return new Window(new AppShell());
    }
}

MainPage özelliği .NET MAUI 9 için korunur, ancak gelecek bir sürümde tamamen kaldırılacaktır.

Uyumluluk düzenleri

Ad alanında Microsoft.Maui.Controls.Compatibility uyumluluk düzeni sınıfları engellendi.

Eski ölçü çağrıları

Aşağıdaki VisualElement eski ölçü yöntemleri engellendi:

  • protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint).
  • public virtual SizeRequest Measure(double widthConstraint, double heightConstraint, MeasureFlags flags = MeasureFlags.None) kaynaktır VisualElement.

Bunun yerine aşağıdaki yöntem kullanıma sunulmuştur:

  • public size Measure(double widthConstraint, double heightConstraint)

Bu Measure yöntem, bir öğenin cihazda görüntülenmesi için gereken en düşük boyutu döndürür. Kenar boşlukları ölçünün dışında tutulur, ancak boyutuyla döndürülür. Bu, görünümü ölçerken çağrılmak için tercih edilen yöntemdir.

Ek olarak, Microsoft.Maui.SizeRequest yapı engellenmiştir. Microsoft.Maui.Size Bunun yerine kullanılmalıdır.

Android için .NET

API 35 desteği ekleyen Android 9 için .NET, derleme sürelerini azaltmaya ve boyutu küçültmek ve performansı geliştirmek için uygulamaların kırpılabilirliğini geliştirmeye yönelik çalışmalar içerir. Android 9 için .NET hakkında daha fazla bilgi için aşağıdaki sürüm notlarını inceleyin:

Varlık paketleri

Android 9 için .NET, varlıkları varlık paketi olarak bilinen ayrı bir pakete yerleştirme olanağı sunar. Bu, normalde Google Play'in izin verdiği temel paket boyutundan daha büyük olan oyunları ve uygulamaları karşıya yüklemenizi sağlar. Bu varlıkları ayrı bir pakete yerleştirerek, 200 Mb'lık temel paket boyutu yerine 2 Gb'a kadar olan bir paketi karşıya yükleme olanağı elde edebilirsiniz.

Önemli

Varlık paketleri yalnızca varlıkları içerebilir. Android için .NET söz konusu olduğunda bu, derleme eylemine AndroidAsset sahip öğeler anlamına gelir.

.NET MAUI uygulamaları, derleme eylemi aracılığıyla MauiAsset varlıkları tanımlar. Varlık paketi şu öznitelik aracılığıyla AssetPack belirtilebilir:

<MauiAsset
    Include="Resources\Raw\**"
    LogicalName="%(RecursiveDir)%(Filename)%(Extension)"
    AssetPack="myassetpack" />

Not

Ek meta veriler diğer platformlar tarafından yoksayılır.

Varlık paketine yerleştirmek istediğiniz belirli öğeleriniz varsa meta verileri tanımlamak için özniteliğini AssetPack kullanabilirsinizUpdate:

<MauiAsset Update="Resources\Raw\MyLargeAsset.txt" AssetPack="myassetpack" />

Varlık paketleri, varlıklarınızın cihaza ne zaman yükleneceğini denetleyen farklı teslim seçeneklerine sahip olabilir:

  • Yükleme zaman paketleri uygulamayla aynı anda yüklenir. Bu paket türünün boyutu 1 Gb'a kadar olabilir, ancak bunlardan yalnızca birine sahip olabilirsiniz. Bu teslim türü meta verilerle belirtilir InstallTime .
  • Hızlı takip paketleri, uygulamanın yüklenmesi tamamlandıktan kısa bir süre sonra yüklenir. Bu tür bir paket yüklenirken uygulama başlatılabilir, bu nedenle varlıkları kullanmaya çalışmadan önce yüklenmesinin tamamlandığını denetlemeniz gerekir. Bu tür bir varlık paketi boyutu 512 Mb'a kadar olabilir. Bu teslim türü meta verilerle belirtilir FastFollow .
  • İsteğe bağlı paketler, uygulama özellikle istemediği sürece cihaza hiçbir zaman indirilmeyecektir. Tüm varlık paketlerinizin toplam boyutu 2 Gb'ı aşamaz ve en fazla 50 ayrı varlık paketiniz olabilir. Bu teslim türü meta verilerle belirtilir OnDemand .

.NET MAUI uygulamalarında, teslim türü üzerinde MauiAssetözniteliğiyle DeliveryType belirtilebilir:

<MauiAsset Update="Resources\Raw\myvideo.mp4" AssetPack="myassetpack" DeliveryType="FastFollow" />

Android varlık paketleri hakkında daha fazla bilgi için bkz . Android varlık paketleri.

Android 15 desteği

Android 9 için .NET, Android 15 (API 35) için .NET bağlamaları ekler. Bu API'ler için derleme yapmak için projenizin hedef çerçevesini güncelleştirin:

<TargetFramework>net9.0-android35</TargetFramework>

LLVM marshalled yöntemleri

Blazor olmayan uygulamalarda Android 9 için .NET'te artık düşük düzeyli Sanal Makine (LLVM) için hizalanmış yöntemler varsayılan olarak etkinleştirilmiştir. Bu, bir test uygulamasındaki performansta yaklaşık %10'lık bir gelişmeye neden oldu.

LLVM'nin marshalled yöntemleri proje dosyanızda (.csproj) devre dışı bırakılabilir:

<PropertyGroup Condition="'$(TargetFramework)' == 'net9.0-android'">
    <AndroidEnableLLVM>false</AndroidEnableLLVM>
    <AndroidEnableLLVMOptimizations>false</AndroidEnableLLVMOptimizations>
</PropertyGroup>

Kırpma geliştirmeleri

Android 9 için .NET, uygulama boyutunu küçültmek için tam kırpma kullanırken düzeltmeler içerir. Tam kırpma genellikle yalnızca uygulamanızın yayın derlemeleri için etkinleştirilir ve proje dosyanızda (.csproj) yapılandırılabilir:

<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net9.0-android'">
    <TrimMode>Full</TrimMode>
</PropertyGroup>

iOS için .NET

iOS, tvOS, Mac Catalyst ve macOS üzerinde .NET 9, aşağıdaki platform sürümleri için Xcode 15.4 kullanır:

  • iOS: 17.5
  • tvOS: 17.5
  • Mac Catalyst: 17.5
  • macOS: 14.5

iOS, tvOS, Mac Catalyst ve macOS'ta .NET 9 hakkında daha fazla bilgi için aşağıdaki sürüm notlarına bakın:

Bağlamalar

iOS 9 için .NET, iOS bağlamaları için .NET'in çok hedefli sürümlerinin kullanılabilmesini sağlar. Örneğin, bir kitaplık projesinin iki ayrı iOS sürümü için derlemesi gerekebilir:

<TargetFrameworks>net9.0-ios17.0;net9.0-ios17.2</TargetFrameworks>

Bu, biri iOS 17.0 bağlamalarını ve biri iOS 17.2 bağlamalarını kullanan iki kitaplık oluşturur.

Önemli

Bir uygulama projesi her zaman en son iOS SDK'sını hedeflemelidir.

iOS ve Mac Catalyst için yerel AOT

iOS 9 için .NET'te, iOS ve Mac Catalyst için yerel Zamanından Önce (AOT) derlemesi, uygulamanızın paket boyutunu ve başlangıç performansını azaltmak için tam kırpmadan yararlanır. Bu, uygulamanızı göndermeye hazır olduğunuzda kullanabileceğiniz bir yayımlama özelliğidir.

Önemli

Uygulamanızın ve bağımlılıklarının bu özelliği kullanabilmesi için tamamen kırpılabilir olması gerekir.

Ayrıca bkz.