.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:
- .NET MAUI 9 RC1
- .NET MAUI 9 Önizleme 7
- .NET MAUI 9 Önizleme 6
- .NET MAUI 9 Önizleme 5
- .NET MAUI 9 Preview 4
- .NET MAUI 9 Önizleme 3
- .NET MAUI 9 Önizleme 2
- .NET MAUI 9 Önizleme 1
Ö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:
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
, , LeadingContent
ve TrailingContent
özellikleri aracılığıyla Content
yü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=""
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:
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.OneTime
olur. 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 localhost
değ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
CarouselView
getiren 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, , Date
ve Time
için Password
yeni 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.Justify
bir 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 Func
yö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ğinHandlerProperties.DisconnectPolicy
varsayılan değeridir.Manual
, işleyicilerin uygulama çağrılarak el ile bağlantısınınDisconnectHandler
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 IView
bir 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 new
da 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=full
hem 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 false ayarlanır. |
MauiShellSearchResultsRendererDisplayMemberNameSupported |
olarak ayarlandığında false değ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 true ayarlanı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 true ayarlanı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 true ayarlanı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 true ayarlanı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ırVisualElement
.
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:
- Android 9 RC1 için .NET
- Android 9 için .NET Önizleme 7
- Android 9 için .NET Önizleme 6
- Android 9 için .NET Önizleme 5
- Android 9 için .NET Önizleme 4
- Android 9 için .NET Önizleme 3
- Android 9 için .NET Önizleme 2
- Android 9 için .NET Önizleme 1
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:
- .NET 9.0.1xx RC1
- .NET 9.0.1xx Preview 7
- .NET 9.0.1xx Preview 6
- .NET 9.0.1xx Preview 5
- .NET 9.0.1xx Preview 4
- .NET 9.0.1xx Preview 3
- .NET 9.0.1xx Preview 2
- .NET 9.0.1xx Preview 1
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.
- .NET 9'daki yenilikler.
- .NET 9 için Vizyonumuz