Nastavení projektů systému Windows
Přidání nových projektů Windows do existujícího Xamarin.Forms řešení
Starší Xamarin.Forms řešení (nebo ta, která jsou vytvořená v systému macOS), nebudou mít Univerzální platforma Windows (UPW) projekty aplikací. Proto budete muset ručně přidat projekt UPW pro sestavení aplikace pro Windows 10 (UPW).
Přidání Univerzální platforma Windows aplikace
Visual Studio 2019 ve Windows 10 se doporučuje vytvářet aplikace pro UPW. Další informace o Univerzální platforma Windows najdete v tématu Úvod do Univerzální platforma Windows.
UPW je k dispozici ve Xamarin.Forms verzi 2.1 a novější a Xamarin.Forms.Mapy se podporuje ve Xamarin.Forms verzi 2.2 a novější.
Užitečné tipy najdete v části věnované řešení potíží.
Podle těchto pokynů přidejte aplikaci pro UPW, která se bude spouštět na telefonech, tabletech a stolních počítačích s Windows 10:
1. Klikněte pravým tlačítkem na řešení a vyberte Přidat > nový projekt... a přidejte prázdný projekt aplikace (Universal Windows):
2. V dialogovém okně Nový Univerzální platforma Windows Project vyberte minimální a cílové verze Windows 10, na kterých bude aplikace běžet:
3. Klikněte pravým tlačítkem na projekt UPW a vyberte Spravovat balíčky NuGet... a přidejte Xamarin.Forms balíček. Zajistěte, aby se ostatní projekty v řešení aktualizovaly také na stejnou verzi Xamarin.Forms balíčku.
4. Ujistěte se, že se nový projekt UPW sestaví v okně nástroje Build > Configuration Manager (pravděpodobně k tomu ve výchozím nastavení nedojde). Zaškrtněte políčka Sestavení a nasazení univerzálního projektu:
5. Klikněte pravým tlačítkem myši na projekt a vyberte Přidat > odkaz a vytvořte odkaz na Xamarin.Forms projekt aplikace (.NET Standard nebo sdílený projekt).
6. V projektu UPW upravte App.xaml.cs zahrnout Init
volání metody uvnitř OnLaunched
metody kolem řádku 52:
// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter
7. V projektu UPW upravte MainPage.xaml odebráním obsaženého Grid
v elementu Page
.
8. V souboru MainPage.xaml přidejte novou xmlns
položku pro Xamarin.Forms.Platform.UWP
:
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
9. V souboru MainPage.xaml změňte kořenový <Page
element na <forms:WindowsPage
:
<forms:WindowsPage
...
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>
10. V projektu UPW upravte MainPage.xaml.cs odebrání : Page
specifikátoru dědičnosti pro název třídy (protože se teď dědí z WindowsPage
důvodu změny provedené v předchozím kroku):
public sealed partial class MainPage // REMOVE ": Page"
11. V MainPage.xaml.cs přidejte LoadApplication
volání do MainPage
konstruktoru Xamarin.Forms pro spuštění aplikace:
// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());
Poznámka:
Argumentem metody LoadApplication
je instance definovaná Xamarin.Forms.Application
v projektu .NET Standard.
12. Přidejte všechny místní zdroje (např. soubory obrázků) ze stávajících projektů platformy, které jsou požadovány.
Řešení problému
"Výjimka volání cíle" při použití řetězce nástrojů Compile with .NET Native
Pokud aplikace pro UPW odkazuje na více sestavení (například knihovny ovládacích prvků třetích stran nebo samotná aplikace je rozdělená do více knihoven), Xamarin.Forms nemusí být možné načíst objekty z těchto sestavení (například vlastní renderery).
K tomu může dojít při použití řetězu nástrojů Compile with .NET Native, což je možnost pro aplikace UPW v okně Vlastnosti > Sestavení > obecné pro projekt.
Můžete to vyřešit pomocí přetížení Forms.Init
volání specifické pro UPW v App.xaml.cs , jak je znázorněno v následujícím kódu (měli byste nahradit ClassInOtherAssembly
skutečnou třídou odkazy na kód):
// 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);
Přidejte položku pro každé sestavení, které jste přidali jako odkaz v Průzkumník řešení, a to buď prostřednictvím přímého odkazu, nebo NuGetu.
Dependency Services a kompilace .NET Native
Sestavení vydaných verzí využívající kompilaci .NET Native můžou selhat při řešení závislostí služeb, které jsou definované mimo hlavní spustitelný soubor aplikace (například v samostatném projektu nebo knihovně).
Metodu DependencyService.Register<T>()
použijte k ruční registraci tříd služby závislostí. Na základě výše uvedeného příkladu přidejte metodu register takto:
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this