Nastavení Windows projektů

Přidání nových projektů Windows do existujícího Xamarin.Forms řešení

Starší Xamarin.Forms řešení (nebo ta vytvořená v systému macOS) nebudou mít projekty aplikací pro Univerzální platforma Windows (UPW). Proto budete muset ručně přidat projekt UPW pro sestavení aplikace Windows 10 (UPW).

Přidání aplikace Univerzální platforma Windows

Visual Studio 2019 pro Windows 10 se doporučuje vytvářet aplikace pro UPW. Další informace o Univerzální platforma Windows najdete v části Úvod do Univerzální platforma Windows.

UpW je k dispozici ve Xamarin.Forms verzi 2.1 a novějších verzích a Xamarin.Forms.Mapy je podporován ve Xamarin.Forms verzi 2.2 a novější.

Užitečné tipy najdete v části pro řešení potíží .

Podle těchto pokynů přidejte aplikaci pro UPW, která bude běžet na Windows 10 telefonech, tabletech a stolních počítačích:

1 . Klikněte pravým tlačítkem na řešení a vyberte Přidat > nový Project... a přidejte prázdný projekt aplikace (Univerzální Windows):

Add New Project Dialog

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 spuštěna:

New Universal Windows Platform Project Dialog

3 . Klikněte pravým tlačítkem na projekt UPW a vyberte Spravovat NuGet Balíčky... 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ě Configuration Manager sestavení > (pravděpodobně se to ve výchozím nastavení nestane). Zaškrtněte políčka Sestavení a nasazení univerzálního projektu:

Configuration Manager Window

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é Project).

Reference Manager Dialog

6 . V projektu UPW upravte soubor App.xaml.cs tak, aby zahrnoval Init volání metody do 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 Grid obsaženého 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 a odeberte : Page specifikátor dědičnosti pro název třídy (protože teď dědí z WindowsPage důvodu změny provedené v předchozím kroku):

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

11 . V souboru MainPage.xaml.cs přidejte LoadApplication volání do konstruktoru MainPageXamarin.Forms pro spuštění aplikace:

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

Poznámka

Argumentem LoadApplication metody je Xamarin.Forms.Application instance definovaná 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í potíží

"Cílová výjimka vyvolání" při použití "Kompilace s .NET Native řetěz nástrojů"

Pokud vaše 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ů Kompilátor s .NET Native, což je možnost pro aplikace UPW v okně Obecné sestavení > vlastností > projektu.

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 NuGet.

Závislostové služby a kompilace .NET Native

Sestavení vydaných verzí používající kompilaci .NET Native můžou selhat při překladu závislostových služeb definovaných mimo hlavní spustitelný soubor aplikace (například v samostatném projektu nebo knihovně).

Tuto 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 registru takto:

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