Hopefully this is a reasonable question for this forum. Or at least there are enough UWP experts in here who would know the answer.
If I have an application built for UWP, will it eventually run on Core 3.0? Is that part of the winui 3.0 roadmap for this year? If so, it is not clearly stated in the roadmap (https://github.com/microsoft/microsoft-ui-xaml/blob/master/docs/roadmap.md ).
I should preface this question by admitting that I am really not sure how the internals of the UWP platform work. I understand that I need to download and target a version of the Windows 10 SDK and, by doing that, it pulls down a massive nuget package (Microsoft.NETCore.UniversalWindowsPlatform). That package seems to add a dependency for the .Net Core CLR (... and oddly it uses .Net core "5.0" - whatever that means).
But I'd like to understand more clearly if/when there will actually be a way for my UWP apps to run on the "real" .Net Core (the same way winforms and WPF apps do).
ie. Will I ever be able to pull dependencies into a UWP app if the dependencies target the "real" .Net Core? (... and/or the dependencies target .Net standard library 2.1)?
.Net Core 3.0 has some things in it that I've been waiting on. But after it finally was released, I suddenly realized that they might not be available to me on the UWP platform apps since it is not the "real" .Net Core. The improvements won't be available to me unless (1) they get added to Standard Library, and (2) a new version of the Windows SDK is released for UWP apps. I'm not sure how long those two things will take, and I feel like I probably shouldn't hold my breath as I wait. I haven't heard much about the Windows 19H2 SDK and I suspect that it won't add much value for UWP/.Net applications developers.
Maybe things would be easier if I simply built WPF apps on core 3.0 and pulled in the UWP components that I need via XAML islands. This approach may offer me more flexibility than trying to build full-fledged UWP applications. Is that right? Any pointers would be appreciated.
@marb2000 said:
Our current plan is that managed WinUI 3 apps uses .NET Core 3 instead of .NET Native at release time.
Thanks for the pointer. I'm assuming that "Managed WinUI 3 apps" is referring to the .Net project template for a managed UWP app?
It would be nice if this was specifically stated in the roadmap for WINUI 3. I suppose it is hard for the WINUI guys to make promises when a decision like this affects multiple Microsoft teams.
Hopefully this won't cause .Net native to take a huge step backwards. In any case, getting on Core 3.0 is probably much more critical to the future of the UWP app model!
It sounds like WINUI 3.0 still has a long road ahead of it before it is released. There are lots of (old and new) commitments! I'd bet its a year away unless they start cutting stuff out of it now. The confusion for observers (like myself) is that it had seemed like the release might coincide with .Net Core 3.0. Maybe that was just wishful thinking...
For now I suppose that anyone who wants to use UWP XAML and Core 3.0 together can just rely on the "xaml islands" in the windows community toolkit. Hopefully the release of version 6.0 is going to happen any day (... in any case much sooner than WINUI 3.0).
It probably won't be long before my UWP XAML applications go back to using the WIN32 app model again! I suppose that's not the end of the world. For now it is definitely the path of "least resistance".
Hopefully this won't cause .Net native to take a huge step backwards.
.Net native is in maintenance mode. It has been decoupled from CoreRT. They fix some bugs.
It looks like when WinUI 3 comes out, you will have the choice of old-style UWP projects (with AOT giving fast startup) and new ones (.Net Core 3.0, slower startup but more features).
.Net Core 3.0 has some things in it that I've been waiting on.
What features in particular?
Will WinUI have any performance degradation comparing to UWP+NetNative, since NetCore is not precompiled?
As I know, there is Mono LLVM as replacement for CoreRT, so will it be used as new runtime backend?
.NET 5 (November 2020) will have an officially supported AOT compiler, based on Mono LLVM given .NET Native only supports a subset of .NET, see here. Benefit of AOT "fast startup, low footprint, and lower memory usage".
What features in particular?
Eg. One third-party framework library I was trying to use had a ton of "catch oledbexception" sprinkled all over the place even though, afaik, it does not actually use oledb. I couldn't (still can't) use the library from a Uwp project for this one silly reason.
It looks like microsoft has added that exception class - or some form of it - into core 3.0. Now the entire library just works!
I was using the desktop bridge w/full trust process launcher ....just to avoid a few catch statements in that library!
Thanks for helping me with my questions. I'm really looking forward to Winui 3.0.
I couldn't (still can't) use the library from a UWP project for this one silly reason.
Obviously they should fix that. They should only take a dependency on Core 3.0 or netstandard 2.1 if they really need to. A lot of .Net will be on netstandard 2.0 for a long time.
Most helpful comment
@marb2000 said: