.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
- .NET MAUI 9 RC2
- .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 MAUI 9 ile derleme yaparken iOS 18, iPadOS 18, tvOS 18 ve macOS 15 için SDK desteği içeren Xcode 16 ile uyumluluk gereklidir. Xcode 16, macOS 14.5 veya üzerini çalıştıran bir Mac gerektirir.
.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.TitleBarüzerinde özelliğinin TitleBar değeri olarak ayarlanabilir:
<Window.TitleBar>
<TitleBar x:Name="TeamsTitleBar"
Title="Hello World"
Icon="appicon.png"
HeightRequest="46">
<TitleBar.Content>
<SearchBar Placeholder="Search"
PlaceholderColor="White"
MaximumWidthRequest="300"
HorizontalOptions="Fill"
VerticalOptions="Center" />
</TitleBar.Content>
</TitleBar>
</Window.TitleBar>
C# dilinde kullanımına bir örnek:
Window window = new Window
{
TitleBar = new TitleBar
{
Icon = "titlebar_icon.png"
Title = "My App",
Subtitle = "Demo"
Content = new SearchBar { ... }
}
};
ATitleBar, , Contentve LeadingContent özellikleri aracılığıyla TrailingContentyüksek oranda özelleştirilebilir:
<TitleBar Title="My App"
BackgroundColor="#512BD4"
HeightRequest="48">
<TitleBar.Content>
<SearchBar Placeholder="Search"
MaximumWidthRequest="300"
HorizontalOptions="Fill"
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.
Daha fazla bilgi için bkz . TitleBar.
Denetim geliştirmeleri
.NET MAUI 9, denetim geliştirmeleri içerir.
BackButtonBehavior OneWay bağlama modu
Bir Shell uygulamasında için ve IsVisible
üzerindeki IsEnabled
bağlama modu BackButtonBehavior 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
bir BlazorWebView içerik barındırmak için varsayılan davranış 0.0.0.1
olarak değiştirildi. İç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);
Varsayılan olarak, BlazorWebView artık temel alınan WebViewManager
öğesinin zaman uyumsuz atılması işlemini tetikler ve unutur. Bu, Android'de atma kilitlenmelerinin oluşma olasılığını azaltır.
Uyarı
Bu tetikle ve unut varsayılan davranışı, tüm nesneler atılmadan önce elden çıkarmanın geri dönebileceği ve bu da uygulamanızda davranış değişikliklerine neden olabileceği anlamına gelir. Atılan öğeler kısmen Blazor'ın kendi iç türleridir, ancak uygulamanızın bir bölümünde kullanılan BlazorWebView kapsamlı hizmetler gibi uygulama tanımlı türlerdir.
Bu davranışı geri çevirmek için uygulamanızı sınıfınızdaki yöntemindeki AppContext bir CreateMauiApp
anahtar aracılığıyla dispose işlemini engelleyecek şekilde yapılandırmanız MauiProgram
gerekir:
AppContext.SetSwitch("BlazorWebView.AndroidFireAndForgetAsync", false);
Uygulamanız bu anahtar aracılığıyla atma işlemini engelleyecek şekilde yapılandırılmışsa, BlazorWebView zaman uyumsuz eşitleme elden çıkarma işlemi gerçekleştirir; bu da zaman uyumsuz elden çıkarma tamamlanana kadar iş parçacığını engellediği anlamına gelir. Bununla birlikte, atma işleminin aynı iş parçacığında kod çalıştırması gerekiyorsa (iş parçacığı beklerken engellendiğinden) bu kilitlenmelere neden olabilir.
iOS'ta düğmeler
Button iOS'taki denetimler artık aralıklara, doldurmalara, kenarlık genişliğine ve kenar boşluklarına önceki sürümlere göre daha doğru şekilde saygı gösterir. içindeki büyük bir Button görüntü artık boşluk, doldurma, kenarlık genişliği ve kenar boşlukları dikkate alınarak boyut üst sınırına göre yeniden boyutlandırılır. Ancak, bir Button metin ve resim içeriyorsa, tüm içeriği düğmenin içine sığdırmak mümkün olmayabilir ve bu nedenle istediğiniz düzeni elde etmek için görüntünüzü el ile boyutlandırmanız gerekir.
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.
Windows'ta odaklanma davranışı
Windows üzerinde .NET MAUI 8'de VisualElement.Focused olayı, VisualElement.Unfocused olayı ve VisualElement.IsFocused özelliği bir öğeye ve alt öğelerine uygulanır:
<VerticalStackLayout Focus="OnFocused">
<Entry />
<Editor />
</VerticalStackLayout>
.NET 8'deki bu örnekte, Windows üzerinde VerticalStackLayout, Entryveya Editor odaklandığında OnFocused
olay işleyicisi çalıştırılır.
.NET MAUI 9, Windows'ta bu davranışı diğer platformlarla aynı olacak şekilde değiştirir. Bu nedenle, VisualElement.Focused olayı, VisualElement.Unfocused olayı ve VisualElement.IsFocused özelliği yalnızca bir öğe için geçerlidir. Bu nedenle, önceki örnek .NET 9 üzerinde çalıştığında, yalnızca giriş denetimleri odak kazanabileceğinden OnFocused
olay işleyicisi yürütülemez.
Yumuşak klavye girişi desteği
.NET MAUI 9, , Password
ve Date
için Time
yeni yumuşak klavye girişi desteği ekler. Bunlar ve Editor denetimlerinde Entry 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 Labelbir HorizontalTextAlignment.Justify
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 NewTime
özelliklerine sahiptirOldTime
.
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.
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 SetBinding değişken kullanarak bağlamaları tanımlayan ek Func
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}";
Uyarı
Bir özellik veya dizin oluşturucu için ayarlanan erişimci erişilemezse CS0272 derleyici hatası oluşur. Bu durumda erişim elemanının erişilebilirliğini artırın.
Buna ek olarak, .NET MAUI 9 bağlamayı ile doğrudan nesnesine ayarlayan ve bağlama nesnesi örneğini döndüren bir BindingBase.Createyöntem eklerFunc
:
// 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.
Koddaki derlenmiş bağlamalar hakkında daha fazla bilgi için bkz. kodda derlenmiş bağlamalar.
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. Özelliğini tanımlayan Source
XAML bağlama ifadelerini derleme hakkında bilgi için bkzSource
tanımlayan bağlamaları derleme.
.NET MAUI 9 varsayılan olarak derlenmiş bağlamaları kullanmayan bağlamalar için derleme uyarıları oluşturur. XAML derlenmiş bağlama uyarıları hakkında daha fazla bilgi için bkz . XAML derlenmiş bağlama uyarıları.
Bağımlılık ekleme
Bir Shell uygulamasında, sayfanızın ömrünü kapsayıcıya göre , veya AddSingleton
yöntemleriyle etkilemek istemediğiniz sürece, artık sayfalarınızı bağımlılık ekleme kapsayıcısına AddTransient
AddScoped
kaydetmeniz gerekmez. Bu yöntemler hakkında daha fazla bilgi için bkz . Bağımlılık ömrü.
İş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, 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ı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 DisconnectHandlersbir ile bağlantısını kesen bir IView 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 AOT dağıtımı
.NET MAUI 9'da iOS ve Mac Catalyst üzerinde Yerel AOT dağıtımını seçebilirsiniz. Yerel AOT dağıtımı, yerel koda derlenmiş, zamanından önce (AOT) olan bir .NET MAUI uygulaması oluşturur. Bu, aşağıdaki avantajları sağlar:
- Uygulama paketi boyutu genellikle 2,5 kata kadar daha küçüktür.
- Daha hızlı başlangıç süresi, genellikle 2 kata kadar daha hızlı.
- Daha hızlı derleme süresi.
Daha fazla bilgi için bkz . iOS ve Mac Catalyst'te yerel AOT dağıtımı.
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 UseMauiEmbeddedApp
uzantı yöntemini çağırınMauiAppBuilder
:
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiEmbeddedApp<App>();
return builder.Build();
}
}
Daha fazla bilgi için bkz . Yerel ekleme.
Proje şablonları
.NET MAUI Uygulama proje şablonu, verileri görselleştirmek ve SQLite tabanlı yerel bir veritabanında kalıcı hale getirmek için .NET MAUI için Syncfusion Toolkit denetimlerini kullanarak tam işlevsel bir yapılacaklar uygulaması oluşturma özelliğini içerir. Bu yapılacaklar uygulamasını oluşturmak için Visual Studio'da .NET MAUI Uygulama projesi şablonunu kullanarak yeni bir proje oluşturun ve ardından Ek bilgi penceresinde Örnek içerik ekle onay kutusunu işaretleyin:
Todo uygulaması veya seçeneğiyle --sample-content
-sc
.NET CLI'dan da oluşturulabilir:
dotnet new maui --sample-content -n MyProject
.NET MAUI 9 ayrıca Visual Studio'ya bir .NET MAUI Blazor Karma ve Web Uygulaması proje şablonu ekler. Bu şablon, Razor sınıf kitaplığı projesinde ortak kodu paylaşan blazor Web uygulamasıyla .NET MAUI Blazor Karma uygulamasıyla çözüm oluşturur.
Şablon .NET CLI'dan da kullanılabilir:
dotnet new maui-blazor-web -n MyProject
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" ?>
.
Kesme
MsBuild özelliği $(TrimMode)
olarak ayarlanarak full
tam kırpma artık desteklenmektedir. Daha fazla bilgi için bkz . .NET MAUI uygulamasını kırpma.
Kırpma uyumsuzlukları
Aşağıdaki .NET MAUI özellikleri tam kırpma ile uyumlu değildir ve düzeltici tarafından kaldırılacaktır:
- Bağlama yolunun bir dizeye ayarlandığı bağlama ifadeleri. Bunun yerine derlenmiş bağlamaları kullanın. Daha fazla bilgi için bkz . Derlenmiş bağlamalar.
- Örtük dönüştürme işleçleri, XAML'deki bir özelliğe uyumsuz türde bir değer atarken veya farklı türlerdeki iki özellik bir veri bağlaması kullandığında. Bunun yerine, türünüz için bir TypeConverter tanımlamanız ve kullanarak TypeConverterAttributetürüne eklemeniz gerekir. Daha fazla bilgi için bkz . Örtük dönüştürme işlecini değiştirmek için TypeConverter tanımlama.
- Uzantı yöntemiyle LoadFromXaml çalışma zamanında XAML yükleniyor. Bu XAML, çalışma zamanında özniteliği veya özniteliğiyle yüklenebilen tüm türlere açıklama eklenerek kırpma güvenli
DynamicallyAccessedMembers
DynamicDependency
hale getirilebilir. Ancak bu çok hataya açıktır ve önerilmez. - kullanarak QueryPropertyAttributegezinti verilerini alma. Bunun yerine, sorgu parametrelerini kabul etmesi gereken türlerde arabirimini uygulamanız IQueryAttributable gerekir. Daha fazla bilgi için bkz . Gezinti verilerini tek bir yöntem kullanarak işleme.
-
SearchHandler.DisplayMemberName
özelliği. Bunun yerine, sonuçların görünümünü ItemTemplate tanımlamak için bir SearchHandler sağlamanız gerekir. Daha fazla bilgi için bkz . Arama sonuçları öğe görünümünü tanımlama. - Dinamik HybridWebView
System.Text.Json
serileştirme özellikleri kullanımı nedeniyle denetim. -
OnPlatform
XAML işaretleme uzantısıyla kullanıcı arabirimi özelleştirmesi. Bunun yerine, OnPlatform<T> sınıfını kullanmanız gerekir. Daha fazla bilgi için bkz. Platformtemelinde kullanıcı arabirimi görünümünü özelleştirme. -
OnIdiom
XAML işaretleme uzantısıyla kullanıcı arabirimi özelleştirmesi. Bunun yerine, OnIdiom<T> sınıfını kullanmanız gerekir. Daha fazla bilgi için bkz. Kullanıcı arabirimi görünümünü cihaz deyimine göre özelleştirme.
Kırpma özelliği anahtarları
.NET MAUI' nin, kırpma güvenli olmayan özellikler için kodu korumayı mümkün hale getiren özellik anahtarları olarak bilinen düzeltici yönergeleri vardır. Bu düzeltici yönergeleri, derleme özelliği olarak ayarlandığında $(TrimMode)
ve Yerel AOT için kullanılabilirfull
:
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, tam kırpma etkinleştirildiğinde bu derleme özelliği olarak ayarlanır false . |
MauiShellSearchResultsRendererDisplayMemberNameSupported |
olarak ayarlandığında false değeri SearchHandler.DisplayMemberName yoksayılır. Bunun yerine, sonuçların görünümünü ItemTemplate tanımlamak için bir SearchHandler sağlamanız gerekir. Varsayılan olarak, bu derleme özelliği tam kırpma veya Yerel AOT etkinleştirildiğinde olarak ayarlanır false . |
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 tam kırpma veya Yerel AOT etkinleştirildiğinde olarak ayarlanır false . |
MauiImplicitCastOperatorsUsageViaReflectionSupport |
olarak ayarlandığında false . .NET MAUI, değerleri bir türden diğerine dönüştürürken örtük dönüştürme 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 TypeConverterAttribute eklemeniz gerekir. Varsayılan olarak, bu derleme özelliği tam kırpma veya Yerel AOT etkinleştirildiğinde olarak ayarlanır false . |
_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. |
MauiEnableXamlCBindingWithSourceCompilation |
olarak ayarlandığında true ,NET MAUI özelliğin kullanıldığı bağlantılar Source da dahil olmak üzere tüm bağlamaları derler. Bu özelliği etkinleştirirseniz, tüm bağlamaların derlenecek şekilde doğru x:DataType olduğundan emin olun veya bağlama derlememesi gerekiyorsa ile veri türünü x:Data={x:Null}} temizleyin. Varsayılan olarak, bu derleme özelliği tam kırpma veya Yerel AOT etkinleştirildiğinde olarak ayarlanır true . |
MauiHybridWebViewSupported |
olarak ayarlandığındafalse HybridWebView, denetim kullanılamaz. Varsayılan olarak, bu derleme özelliği tam kırpma veya Yerel AOT etkinleştirildiğinde olarak ayarlanır false . |
Bu MSBuild özellikleri de eşdeğer AppContext anahtarlara sahiptir:
- MSBuild özelliğinin
MauiEnableVisualAssemblyScanning
adlı AppContexteşdeğerMicrosoft.Maui.RuntimeFeature.IsIVisualAssemblyScanningEnabled
bir anahtarı vardır. - MSBuild özelliğinin
MauiShellSearchResultsRendererDisplayMemberNameSupported
adlı AppContexteşdeğerMicrosoft.Maui.RuntimeFeature.IsShellSearchResultsRendererDisplayMemberNameSupported
bir anahtarı vardır. - MSBuild özelliğinin
MauiQueryPropertyAttributeSupport
adlı AppContexteşdeğerMicrosoft.Maui.RuntimeFeature.IsQueryPropertyAttributeSupported
bir anahtarı vardır. - MSBuild özelliğinin
MauiImplicitCastOperatorsUsageViaReflectionSupport
adlı AppContexteşdeğerMicrosoft.Maui.RuntimeFeature.IsImplicitCastOperatorsUsageViaReflectionSupported
bir anahtarı vardır. - MSBuild özelliğinin
_MauiBindingInterceptorsSupport
adlı AppContexteşdeğerMicrosoft.Maui.RuntimeFeature.AreBindingInterceptorsSupported
bir anahtarı vardır. - MSBuild özelliğinin
MauiEnableXamlCBindingWithSourceCompilation
adlı AppContexteşdeğerMicrosoft.Maui.RuntimeFeature.MauiEnableXamlCBindingWithSourceCompilationEnabled
bir anahtarı vardır. - MSBuild özelliğinin
MauiHybridWebViewSupported
adlı AppContexteşdeğerMicrosoft.Maui.RuntimeFeature.IsHybridWebViewSupported
bir anahtarı vardır.
Özellik anahtarını kullanmanın en kolay yolu, ilgili MSBuild özelliğini uygulamanızın proje dosyasına (*.csproj) yerleştirmektir ve bu da ilgili kodun .NET MAUI derlemelerinden kesilmesine neden olur.
Windows uygulaması dağıtımı
Yeni bir .NET MAUI projesinde hata ayıklama ve Windows'a dağıtma sırasında,.NET MAUI 9'daki varsayılan davranış paketlenmemiş bir uygulama dağıtmaktır. Daha fazla bilgi için bkz . Windows'da .NET MAUI uygulamanızı dağıtma ve hatalarını ayıklama.
XAML derleyicisi hata kodları
.NET MAUI 9'da, XAML derleyicisi hata kodları ön eklerini olarak XFC
XC
değiştirdi. Yeni ön eke başvurmak için, uygulamanızın $(WarningsAsErrors)
proje dosyalarında , $(WarningsNotAsErrors)
ve $(NoWarn)
derleme özelliklerini güncelleştirdiğinizden emin olun.
XAML biçimlendirme uzantıları
, , IMarkupExtensionIMarkupExtension<T>ve uygulayan IValueProviderve IExtendedTypeConverter veya RequireServiceAttributeile AcceptEmptyServiceProviderAttribute 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.
Önemli
xcsync şu anda önizleme aşamasındadır.
Bu dosyaları oluşturmak veya eşitlemek ve bir proje dosyası ile ek bağımsız değişkenler geçirmek için veya dotnet build
komutlarıyla kullanırsınız:xcsync-generate
xcsync-sync
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.
Bir Frame, Borderile değiştirildiğinde, Frame.BorderColor özellik değeri Border.Stroke özellik değeri olmalı ve Frame.CornerRadius özellik değeri ise Border.StrokeShape özellik değerinin parçası olmalıdır. Ayrıca, Margin
değerinin Padding
değeri olarak çoğaltılması gerekebilir.
Aşağıdaki örnek, XAML'deki eşdeğer Frame ve Border öğelerini gösterir:
<Frame BorderColor="DarkGray"
CornerRadius="5"
Margin="20"
HeightRequest="360"
HorizontalOptions="Center"
VerticalOptions="Center" />
<Border Stroke="DarkGray"
StrokeShape="RoundRectangle 5"
Margin="20"
Padding="20"
HeightRequest="360"
HorizontalOptions="Center"
VerticalOptions="Center" />
Daha fazla bilgi için bkz . Kenarlık.
MainPage
Bir nesnedeki özelliğini MainPage kullanarak Application uygulamanızın ilk sayfasını tanımlamak yerine, özelliğini Page uygulamanızın ilk sayfasına ayarlamanız Window 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 Pageüzerinde özelliğinin ayarlanması Window gösterilmektedirCreateWindow
:
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState? activationState)
{
return new Window(new AppShell());
}
}
Özelliğine erişen kodun Application.Current.MainPage
artık tek bir pencere ile uygulamalar için özelliğine Application.Current.Windows[0].Page
erişmesi gerekir. Birden çok penceresi olan uygulamalar için doğru pencereyi tanımlamak ve ardından özelliğine Application.Current.Windows
erişmek için koleksiyonunu kullanınPage
. Buna ek olarak, her öğe, öğe geçerli pencerenin parçası olduğunda erişilebilen ve özelliğine Window
erişilebilen (Page
) bir Window.Page
özellik içerir. Platform kodu, uzantı yöntemiyle IWindow uygulamanın Microsoft.Maui.Platform.GetWindow
nesnesini alabilir.
MainPage Özellik .NET MAUI 9'da korunsa da, 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 ölçü yöntemleri engellendi:
Bunlar .NET MAUI düzen beklentileriyle düzgün çalışmayan eski ölçü yöntemleridir.
Bunun yerine VisualElement.Measure(Double, Double) yöntemi kullanıma sunulmuştur. Bu 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, SizeRequest yapı engellenmiştir. Size Bunun yerine kullanılmalıdır.
.NET 8'den .NET 9'a yükseltme
.NET MAUI projelerinizi .NET 8'den .NET 9'a yükseltmek için, önce .NET 9 ve .NET MAUI iş yükünü Visual Studio 17.12+ veya Visual Studio Code ile .NET MAUI uzantısı ve .NET maui iş yükleri ya da tek başına yükleyiciyükleyin.
Proje dosyasını güncelleştirme
.NET MAUI uygulamanızı .NET 8'den .NET 9'a güncelleştirmek için uygulamanın proje dosyasını (.csproj) açın ve Hedef Çerçeve Takma Adlarını (TFM) 8'den 9'a değiştirin. Platform sürümüyle eşleştiğinden veya tamamen kaldırdığınızdan emin olmak gibi net8.0-ios15.2
bir TFM kullanıyorsanız. Aşağıdaki örnekte bir .NET 8 projesinin TFM'leri gösterilmektedir:
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
Aşağıdaki örnekte bir .NET 9 projesinin TFM'leri gösterilmektedir:
<TargetFrameworks>net9.0-android;net9.0-ios;net9.0-maccatalyst;net9.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net9.0-windows10.0.19041.0</TargetFrameworks>
Uygulamanızın proje dosyası doğrudan veya derleme özelliği aracılığıyla NuGet paketinin Microsoft.Maui.Controls
.NET 8 sürümüne $(MauiVersion)
başvuruda bulunursa, bunu bir .NET 9 sürümüne güncelleştirin. Ardından, uygulamanızın bu paketten Microsoft.Maui.Controls.Compatibility
herhangi bir tür kullanmaması koşuluyla NuGet paketinin paket başvurularını kaldırın. Ayrıca, NuGet paketinin paket başvurularını Microsoft.Extensions.Logging.Debug
en son .NET 9 sürümüne güncelleştirin.
Uygulamanız iOS veya Mac Catalyst'i hedeflediyse, bu platformların $(SupportedOSPlatformVersion)
derleme özelliklerini 15.0 olarak güncelleştirin:
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">15.0</SupportedOSPlatformVersion>
Yeni bir .NET MAUI projesinde hata ayıklama ve Windows'a dağıtma sırasında, .NET 9'daki varsayılan davranış paketlenmemiş bir uygulama dağıtmaktır. Bu davranışı benimsemek için bkz . Paketlenmiş bir .NET MAUI Windows uygulamasını paketten çıkarılmaya dönüştürme.
Yükseltilen uygulamanızı ilk kez oluşturmadan önce ve bin
klasörlerini obj
silin. Derleme hataları ve uyarıları sonraki adımlarda size yol gösterir.
XAML derleyicisi hata kodlarını güncelleştirme
XAML derleyicisi hata kodları ön ekini olarak XFC
değiştirdi, bu nedenle, yeni öneklere XC
başvurmak için uygulamanızın proje dosyasındaki , $(WarningsAsErrors)
ve $(WarningsNotAsErrors)
derleme özelliklerini güncelleştirin$(NoWarn)
.
Derlenmiş bağlamalar için yeni XAML derleyici uyarılarını ele alın
Derlenmiş bağlamaları kullanmayan bağlamalar için derleme uyarıları oluşturulacak ve bunların ele alınması gerekecektir. Daha fazla bilgi için bkz . XAML derlenmiş bağlama uyarıları.
XAML işaretleme uzantılarını güncelleştirme
XAML işaretleme uzantılarına veya RequireServiceAttributeile AcceptEmptyServiceProviderAttribute ek açıklama eklenmelidir. Bu, uygulama boyutunu azaltmaya ve çalışma zamanı performansını geliştirmeye yardımcı olan daha verimli kod oluşturulmasını sağlayan bir XAML derleyici iyileştirmesi nedeniyle gereklidir. Daha fazla bilgi için bkz . Hizmet sağlayıcıları.
Adres 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. Bu nedenle, kullanım dışı bırakılan API'ler hakkındaki derleme uyarılarını ele alın. Daha fazla bilgi için bkz . Kullanım dışı API'ler.
Source özelliğini ayarlayan derlenmiş bağlamaları benimseme
Daha iyi çalışma zamanı performansından yararlanmak için özelliğini ayarlayan Source
bağlamaları derlemeyi tercih edebilirsiniz. Daha fazla bilgi için bkzSource
tanımlayan bağlamaları derleme.
C'de derlenmiş bağlamaları benimseme#
Daha iyi çalışma zamanı performansından yararlanmak için kodda bildirilen bağlama ifadelerini derlemeyi tercih edebilirsiniz. Daha fazla bilgi için bkz . Kodda derlenmiş bağlamalar.
Tam kırpmayı benimseme
MSBuild özelliğini $(TrimMode)
olarak ayarlayarak full
uygulamanızın genel boyutunu küçültmek için tam kırpmayı kullanmayı benimseyebilirsiniz. Daha fazla bilgi için bkz . .NET MAUI uygulamasını kırpma.
Desteklenen platformlarda NativeAOT dağıtımlarını benimseme
iOS ve Mac Catalyst'te Yerel AOT dağıtımlarını kabul edebilirsiniz. Yerel AOT dağıtımı, yerel koda derlenmiş, zamanından önce (AOT) olan bir .NET MAUI uygulaması oluşturur. Daha fazla bilgi için bkz . iOS ve Mac Catalyst'te yerel AOT dağıtımı.
Android için .NET
API 35 desteği ekleyen .NET 9'da Android 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. .NET 9'da Android için .NET hakkında daha fazla bilgi için aşağıdaki sürüm notlarını inceleyin:
- Android 9 için .NET
- Android 9 RC2 için .NET
- 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
.NET 9'da Android 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 Update
kullanabilirsinizAssetPack
:
<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 DeliveryType
özniteliğiyle MauiAsset
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
.NET 9'da Android 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 olarak net9.0-android
güncelleştirin:
<TargetFramework>net9.0-android</TargetFramework>
Not
Hedef çerçeve olarak da belirtebilirsiniz net9.0-android35
, ancak 35 sayısı büyük olasılıkla gelecek .NET sürümlerinde daha yeni Android işletim sistemi sürümleriyle eşleşecek şekilde değişecektir.
Varsayılan olarak 64 bit mimariler
.NET 9'da Android için .NET artık varsayılan olarak aşağıdaki çalışma zamanı tanımlayıcılarını (RID) oluşturmaz:
android-arm
android-x86
Bu, derleme sürelerini geliştirmeli ve Android .apk
dosyalarının boyutunu azaltmalıdır. Google Play'in uygulama paketlerini mimari başına bölmeyi desteklediğini unutmayın.
Bu mimariler için derlemeniz gerekiyorsa bunları proje dosyanıza (.csproj) ekleyebilirsiniz:
<RuntimeIdentifiers>android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
Veya çok hedefli bir projede:
<RuntimeIdentifiers Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
Android marshal yöntemleri
.NET 9'daki Android hazırlama yöntemlerinde yapılan iyileştirmeler, özelliğin uygulamalarda daha güvenilir çalışmasını sağladı, ancak henüz varsayılan değildir. Bu özelliğin etkinleştirilmesi, bir test uygulamasında performansta yaklaşık %10'lık bir iyileştirmeye neden oldu.
Proje dosyanızda (.csproj) Android marshal yöntemleri şu özellik aracılığıyla $(AndroidEnableMarshalMethods)
etkinleştirilebilir:
<PropertyGroup>
<AndroidEnableMarshalMethods>true</AndroidEnableMarshalMethods>
</PropertyGroup>
Özellik hakkında belirli ayrıntılar için GitHub'da özellik belgelerine veya uygulamasına bakın.
Kırpma geliştirmeleri
.NET 9'da Android API derlemeleri (Mono.Android.dll, Java.Interop.dll) artık tamamen kırpma uyumlu. Tam kırpmayı kabul etmek için proje dosyanızda ($(TrimMode)
) özelliğini ayarlayın:
<PropertyGroup>
<TrimMode>Full</TrimMode>
</PropertyGroup>
Bu ayrıca, sorunlu C# kodları için uyarılar sunulması için çözümleyicileri kırpmaya da olanak tanır.
Daha fazla bilgi için bkz . Ayrıntı düzeyini kırpma.
iOS için .NET
iOS, tvOS, Mac Catalyst ve macOS üzerinde .NET 9, aşağıdaki platform sürümleri için Xcode 16.0 kullanır:
- iOS: 18.0
- tvOS: 18.0
- Mac Catalyst: 18.0
- macOS: 15.0
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
- .NET 9.0.1xx RC2
- .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.
Kırpma geliştirmeleri
.NET 9'da iOS ve Mac Catalyst derlemeleri (Microsoft.iOS.dll, Microsoft.MacCatalyst.dll vb.) artık tamamen kırpma uyumlu. Tam kırpmayı kabul etmek için proje dosyanızda ($(TrimMode)
) özelliğini ayarlayın:
<PropertyGroup>
<TrimMode>Full</TrimMode>
</PropertyGroup>
Bu ayrıca, sorunlu C# kodları için uyarılar sunulması için çözümleyicileri kırpmaya da olanak tanır.
Daha fazla bilgi için bkz . Ayrıntı düzeyini kırpma.
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. NativeAOT, yeni bir çalışma zamanını da kabul ederek tam kırpmayı kullanır.
Önemli
Uygulamanızın ve bağımlılıklarının bu özelliği kullanabilmesi için tamamen kırpılabilir olması gerekir.
NativeAOT, uygulamanın çalışma zamanında doğru şekilde çalışacağını kanıtlamak için uygulamaların sıfır düzeltici uyarısıyla derlenmesini gerektirir.
Ayrıca bkz.
- .NET 9'daki yenilikler.
- .NET 9 için Vizyonumuz