5

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: enter image description here

Here are my runtimes: enter image description here

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

1 Answers1

4

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 application 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:

enter image description here

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 this 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):

enter image description here

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:

enter image description here

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

https://learn.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.

  • 1
    Thank you! I was stuck wasting time on Net6 as well. Uno documentation can definitely use some work. – Nico Feb 23 '22 at 17:11