简体   繁体   中英

Disappointing First UNO Experience. Only WASM works

I've spent the weekend and have still failed to get a "Hello, World" working. Visual Studio:

2022 Version 17.0.4
2022 Preview Version 17.1.0 Preview 1.1

uno-check says everything is fine: 在此处输入图像描述

Here are my runtimes: 在此处输入图像描述

Neither WUX or MUX (UWP or Desktop) flavors of WinUI work. Android emulators coming up but the Hello World not deploying. Local Android device detected, but not deploying. Linux (Skia.GTK) not working.

WASM IS able to display the text "Hello, World".

Wow. I was jazzed after watching every minute of the recent version 4 release conference. But if it is this difficult to just get the thing running..? ?

I'm determined to get it working... but it appears to be a major unproductive project to do so. Am I the only one in the world having difficulty?

Mark

December 19, 2001

Ok, I was able to get WinUI (Desktop), WASM, Skia (WPF for Windows 7), Skia (Gtk for Linux), and Android working with "Hello, World". Let me share what I learned and hopefully spare others this painful experience I've had.

Of course, before doing the following steps you'll want to install and run unocheck, so follow the documentation to do so and make sure all issues are resolved.

Once you pass unocheck, then:

  1. First, forget about using .NET 6. They aren't ready. This is what cost me most of my time. Uno 4 may advertise as .NET 6 compatible and they're getting close... but they are not there yet.

  2. Forget about using project templates within Visual Studio. Amazingly, even after releasing version 4.0 they haven't completed a template for the most important project that developers want: WinUI 3 Desktop. So, for now, just focus on using the CLI to install and invoke templates.

Open the cmd prompt and install templates with the following command: dotnet new -i Uno.ProjectTemplates.Dotnet

This will install several templates. If you want to create a cross-platform based on WinUI 3 Desktop (Win32) version, then:

First create the containing folder (like "C:\Users\Mark\Code"). Then, using the command prompt, navigate to this folder and from within this folder enter the following command:

dotnet new unoapp-winui -o SolutionName

This will produce a .NET 5 solution with a packaged WinUI 3 Desktop as the main development head. The WinUI 3 head will have a dependency on the latest WindowsAppSDK ver. 1.0 (formerly Project Reunion).

DO NOT USE THE COMMAND:

dotnet new unoapp-winui-net6 -o SolutionName

This will produce a .NET 6 solution that will be screwed up and won't work. Hopefully, they'll have all this corrected in the coming weeks. I would just wait until NVentive releases updated Templates for Visual Studio that support WinUI 3 for .NET 6. Then it will be easy to upgrade your solution from .NET 5 to .NET 6.

  1. When you run the dotnet new unoapp-winui -o SolutionName command, you will notice that several of the projects fail to "restore" properly: 在此处输入图像描述

To solve this, use the command prompt to navigate into each of the failed projects and enter the command:

dotnet restore

Now you're ready to use Visual Studio to launch your solution. Select the WinUI 3 Packaging Project as your startup project and attempt to run "Hello, World".
4) You may get the error: "Error MSB3270 There was a mismatch between the processor architecture of the project being built "AMD64" and the processor architecture of the reference...". If so, open your build configuration and check whether your packaging and main WinUI 3 project use different CPU targets as shown here (BFRLE is the name of my solution): 在此处输入图像描述

I fixed this by changing the target platform of BFRLE.Windows.Desktop to x64 to match the packaging project. While you're in the configuration manager be sure that the Android project is deployed (otherwise it won't deploy during debugging).

  1. Next, make sure that you install the GTK+3 runtime on your computer. you can do so here:

https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases

The absence of this runtime is NOT checked for in unocheck.

  1. I also installed WSL.

At this point you ought to be able to run "Hello, World" as a local WinUI 3 Desktop app, as an IIS Express-hosted WASM app, as a Skia.WPF.Host app, and as a Skia.Gtk app.I didn't try to run the MacOS or iOS flavors since these require physical hardware. I did try to connect my old Android phone (Galaxy Note 5, OS 7 API 24). To get a phone recognized of course you have to enable Developer Mode and enable USB Debugging (see online docs). To get my phone recognized... had to disable Fast Deployment. Even after this got my phone communicating, I was not able to successfully deploy to this old phone (I suspect I need to update my phone).

  1. In order to use a virtual Android emulator you need to go to the project properties of the Android project and ENABLE Fast Deployment and Incremental Android Packaging as shown below:

在此处输入图像描述

  1. You can accelerate your virtual Android emulator by enabling settings in Windows and your BIOS as explained here:

https://docs.microsoft.com/en-us/xamarin/android/get-started/installation/android-emulator/hardware-acceleration?pivots=windows

The steps above finally got things working for me. It didn't matter whether I was using VS 2022 or VS 2022 preview -- so that's one less thing you have to worry about.

Now on to the more interesting problems of getting a real application to run cross-platform.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM