Windows Projelerini Ayarlama

Mevcut Xamarin.Forms bir çözüme yeni Windows projeleri ekleme

Eski Xamarin.Forms çözümlerin (veya macOS'ta oluşturulanların) Evrensel Windows Platformu (UWP) uygulama projeleri olmaz. Bu nedenle, bir Windows 10 (UWP) uygulaması oluşturmak için el ile bir UWP projesi eklemeniz gerekir.

Evrensel Windows Platformu uygulaması ekleme

Windows 10'da Visual Studio 2019'un UWP uygulamaları derlemesi önerilir. Evrensel Windows Platformu hakkında daha fazla bilgi için bkz. Evrensel Windows Platformu giriş.

UWP 2.1 ve üzeri sürümlerde Xamarin.Forms kullanılabilir ve Xamarin.Forms.Haritalar 2.2 ve üzeri sürümlerde Xamarin.Forms desteklenir.

Yararlı ipuçları için sorun giderme bölümüne bakın.

Windows 10 telefonlarında, tabletlerde ve masaüstlerinde çalışacak bir UWP uygulaması eklemek için şu yönergeleri izleyin:

1. Çözüme sağ tıklayın ve Yeni Proje Ekle>... öğesini seçin ve Boş Uygulama (Evrensel Windows) projesi ekleyin:

Add New Project Dialog

2. Yeni Evrensel Windows Platformu Projesi iletişim kutusunda, uygulamanın üzerinde çalıştırılacağı En düşük ve hedef Windows 10 sürümlerini seçin:

New Universal Windows Platform Project Dialog

3. UWP projesine sağ tıklayın ve NuGet Paketlerini Yönet... öğesini seçin ve paketi ekleyinXamarin.Forms. Çözümdeki diğer projelerin de paketin aynı sürümüne Xamarin.Forms güncelleştirildiğinden emin olun.

4. Yeni UWP projesinin Derleme > Yapılandırma Yöneticisi penceresinde derlenmiş olduğundan emin olun (bu muhtemelen varsayılan olarak gerçekleşmeyecektir). Evrensel proje için Derleme ve Dağıtma kutularını işaretleyin:

Configuration Manager Window

5. Projeye sağ tıklayın ve Başvuru Ekle'yi > seçin ve uygulama projesine Xamarin.Forms (.NET Standard veya Paylaşılan Proje) bir başvuru oluşturun.

Reference Manager Dialog

6. UWP projesinde App.xaml.cs düzenleyerek yöntem çağrısını Init 52. satır civarındaki yöntemin OnLaunched içine ekleyin:

// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter

7. UWP projesinde, öğesinde bulunan öğesini Grid kaldırarak MainPage.xaml dosyasını Page düzenleyin.

8. MainPage.xaml dosyasında için Xamarin.Forms.Platform.UWPyeni xmlns bir giriş ekleyin:

xmlns:forms="using:Xamarin.Forms.Platform.UWP"

9. MainPage.xaml dosyasında kök <Page öğesini olarak <forms:WindowsPagedeğiştirin:

<forms:WindowsPage
...
   xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>

10. UWP projesinde, sınıf adının devralma tanımlayıcısını kaldırmak : Page için MainPage.xaml.cs düzenleyin (önceki adımda yapılan değişiklik nedeniyle artık öğesinden WindowsPage devralınacağı için):

public sealed partial class MainPage  // REMOVE ": Page"

11. MainPage.xaml.cs'daMainPage, uygulamayı başlatmak için oluşturucuya çağrıyı Xamarin.Forms ekleyinLoadApplication:

// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());

Not

yönteminin LoadApplication bağımsız değişkeni, .NET standart projenizde tanımlanan örnektir Xamarin.Forms.Application .

12. Gerekli olan mevcut platform projelerinden tüm yerel kaynakları (ör. görüntü dosyaları) ekleyin.

Sorun giderme

".NET Native araç zinciriyle derleme" kullanılırken "Hedef Çağırma Özel Durumu"

UWP uygulamanız birden çok derlemeye başvuruyorsa (örneğin, üçüncü taraf denetim kitaplıkları veya uygulamanızın kendisi birden çok kitaplığa bölünmüşse), bu derlemelerden (özel işleyiciler gibi) Xamarin.Forms nesneleri yükleyemeyebilir.

Bu durum, projenin Özellikler Derleme Genel penceresindeki UWP uygulamaları için bir seçenek olan .NET Native ile Derle araç zinciri kullanılırken ortaya çıkabilir. > >

Bunu, aşağıdaki kodda gösterildiği gibi App.xaml.cs çağrısının Forms.Init UWP'ye özgü aşırı yüklemesini kullanarak düzeltebilirsiniz (değerini kod başvurularınızın gerçek bir sınıfıyla değiştirmeniz ClassInOtherAssembly gerekir):

// You'll need to add `using System.Reflection;`
List<Assembly> assembliesToInclude = new List<Assembly>();

// Now, add in all the assemblies your app uses
assembliesToInclude.Add(typeof (ClassInOtherAssembly).GetTypeInfo().Assembly);

// Also do this for all your other 3rd party libraries
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
// replaces Xamarin.Forms.Forms.Init(e);

doğrudan başvuru veya NuGet aracılığıyla Çözüm Gezgini başvuru olarak eklediğiniz her derleme için bir girdi ekleyin.

Bağımlılık Hizmetleri ve .NET Yerel Derlemesi

.NET Native derlemesi kullanan yayın derlemeleri, ana uygulama yürütülebilir dosyası dışında tanımlanan bağımlılık hizmetlerini (ayrı bir proje veya kitaplık gibi) çözümleyemez.

DependencyService.Register<T>() Bağımlılık hizmeti sınıflarını el ile kaydetmek için yöntemini kullanın. Yukarıdaki örneğe göre aşağıdaki gibi yazmaç yöntemini ekleyin:

Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this